JavaScript中的聲明提升規(guī)則是在代碼執(zhí)行前,所有的變量聲明(使用var關鍵字)和函數(shù)聲明都會被提升到當前作用域的頂部,這意味著可以在聲明之前使用這些變量和函數(shù),而不會出現(xiàn)未定義的錯誤。
具體來說,變量聲明會被提升,但是變量的賦值不會被提升。例如:
console.log(x); // 輸出 undefined
var x = 5;
上述代碼中,變量x的聲明會被提升到作用域的頂部,所以在使用x之前不會出現(xiàn)錯誤,但是由于賦值語句沒有被提升,所以輸出的是undefined。
對于函數(shù)聲明,整個函數(shù)體都會被提升,而不僅僅是函數(shù)名。例如:
myFunction(); // 調用函數(shù),輸出 "Hello World!"
function myFunction() {
console.log("Hello World!");
}
上述代碼中,函數(shù)聲明會被提升到作用域的頂部,所以在調用函數(shù)之前不會出現(xiàn)錯誤。
需要注意的是,函數(shù)聲明的提升優(yōu)先于變量聲明的提升。例如:
myFunction(); // 調用函數(shù),輸出 "Hello World!"
var myFunction = function() {
console.log("Hello World!");
}
上述代碼中,函數(shù)聲明會被提升到作用域的頂部,所以在調用函數(shù)之前不會出現(xiàn)錯誤。但是由于變量聲明的提升優(yōu)先于賦值語句,變量myFunction在賦值之前就被提升了,所以調用的是undefined,而不是函數(shù)本身。