var a = 'programmer'functionfoo() {
var b = 'iceman'
console.log(a); // programmer
console.log(b); // iceman
console.log(c); // c is not defined
}
foo()
複製代碼
var value = 1
functionfoo() {
console.log(value);
}
functionbar() {
var value = 2
foo()
}
bar() // 輸出 1
複製代碼
如上:foo 做用域內沒有定義 value 在它所定義的上級做用域裏定義了一個 value,在 bar 環境內調用 foo,因爲 JavaScript 採用的是詞法做用域,也就是在定義時就肯定了 做用域,因此 foo 會獲取到 它的所定義位置的上一層做用域中的 value 而不是 bar 中的 value
而動態做用域就會與詞法做用域相反,採用動態做用域的語言不多,若是是動態做用域,函數的做用域是由調用的時候肯定的,就會輸出 bar 內的 value