JavaScript 提升(Hoisting)

182 阅读1分钟

提升(Hoisting)是 JavaScript 将声明移至顶部的默认行为。

JavaScript 声明会被提升

在 JavaScript 中,可以在使用变量之后对其进行声明。 换句话说,可以在声明变量之前使用它。

x = 5; // 把 5 赋值给 x
 
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x;                     // 在元素中显示 x

var x; // 声明 x

Hoisting 是 JavaScript 将所有声明提升到当前作用域顶部的默认行为(提升到当前脚本当前函数的顶部)。

let 和 const 关键字

用 let 或 const 声明的变量和常量不会被提升!

JavaScript 初始化不会被提升

JavaScript 只提升声明,而非初始化。

var x = 5; // 初始化 x
 
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y;           // 显示 x 和 y
 
var y = 7; // 初始化 y 

输出值: image.png

y 仍然是未定义能说得通吗? 这是因为只有声明(var y)而不是初始化(=7)被提升到顶部。 由于 hoisting,y 在其被使用前已经被声明,但是由于未对初始化进行提升,y 的值仍是未定义。