JavaScript Hoisting是指在代码执行前,JavaScript引擎会将变量和函数的声明从其作用域中的顶部移动到顶部,无论实际声明的位置在哪里。这意味着在代码中的任何位置,都可以引用变量和函数的声明,而不会引发错误。
Hoisting主要发生在两个方面:
变量声明:变量声明会被提升到其作用域的顶部,但是变量的赋值不会被提升。
函数声明:函数声明会被提升到其作用域的顶部,这意味着可以在函数声明之前调用函数。
例如,以下代码演示了Hoisting的行为:
console.log(x); // undefined
var x = 5;
console.log(y); // ReferenceError: y is not defined
let y = 10;
sayHello(); // "Hello"
function sayHello() {
console.log("Hello");
}
在第一个例子中,变量x的声明被提升到顶部,但是赋值操作并没有被提升,所以在声明之前打印x会得到undefined。
在第二个例子中,变量y使用let关键字声明,let不会被hoisting,所以在声明之前使用y会抛出ReferenceError。
在第三个例子中,函数sayHello的声明被提升到顶部,所以可以在声明之前调用函数。