Skip to content
快看这页儿写了啥...

JS 中什么是变量提升?导致了什么问题?

题干

  • 变量提升
  • 变量提升带来的问题

题解

变量提升是指在 JS 代码执行中, JS 引擎(V8)把变量的声明部分和函数的声明部分提升到代码开头的行为。变量提升后,会给变量设置默认值 undefined,给函数赋值函数体。

在 JS 的变量提升中,提升的只是变量的声明,所以对于 var a = 1,一般把它拆分成 var aa = 1。 只提升 var aa = 1 不变。

本质其实是 JS 引擎在编译的时候,就将所有的变量声明了,因此在执行的时候,所有的变量都已经完成声明。

变量提升可能导致一些问题,比如:

  • 变量、函数意外覆盖:由于变量和函数声明都会提升到作用域头部,同名变量或函数会被覆盖,导致逻辑混乱、程序出错。

  • 可读性、可维护性低:变量提升可能会导致一些代码的可读性和可维护性降低,比如在代码中间或者末尾声明一个变量,而不是在开头。

  • 不必要的内存占用:由于变量提升,变量和函数的声明会在代码执行前被提升到当前作用域的顶部,这可能会导致一些不必要的内存占用,尤其是在全局作用域中。

可以尽量避免这些问题,比如:

  • 使用 letconst 关键字来声明变量,它们不会被提升。

  • 在使用一个变量之前先声明它,并且尽量在代码开头或者合适的位置进行声明。

  • 使用严格模式(use strict)来避免一些隐式的全局变量的创建。

相关

let、var、const

暂时性死区(TDZ)

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐