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的聲明被提升到頂部,所以可以在聲明之前調用函數。