0%

JavaScript 核心 (3) - 執行環境與作用域 - 語法作用域

語法作用域 Lexical scope

又稱 靜態作用域
當宣告語法時,就已經決定其作用域
而常見作用域有 全域環境區域環境

1
2
3
4
function test() {
var name = 'Cloud';
}
console.log(name); /* name is not defined; */

此時 name 的作用域是在函式內,全域環境並沒有 name 參數

1
2
3
4
5
6
7
function sayHi() {
function sayName() {
console.log('Cloud');
}
}

sayName(); /* sayName is not defined; */

除了變數以外,函式也會受到語法作用域影響

動態作用域

變數的作用域在函式調用時才決定

綜合說明

以下範例

1
2
3
4
5
6
7
8
9
var value = 1; /* 全域變數 */
function fu1 {
console.log(value);
}
function fu2 {
var value = 2; /* 區域變數 */
fu1();
}
fu2();
  • 靜態作用域: value = 1
  • 動態作用域: value = 2

參考資料