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