在Javascript中對於宣告(declaration)會移到作用域的最上方,此預設行為稱為Hoisting。
以下的範例會印出10
1 | x = 10; |
實際上javascript interpreter會將x的宣告移到上方,也就是:1
2
3var x = undefined;
x = 10;
console.log(x);
hositing也會影響function expression的執行,例如:
1 | function hoistingTest() { |
這段程式碼對javascript來說是長這樣:1
2
3
4
5
6
7
8function hoistingTest() {
var foo = undefined;
foo(); // 此時foo為一undefined的變數
foo = function () {
alert("foo");
}
// ...略
}
Javascript雖然語法上是c-like,但在作用域(scope)的觀念有差別,這也會影響程式執行結果。