welcome to Cheeto's blog

0%

JavaScript核心篇:作用域

JavaScript 作用域

JavaScript是採用語法作用域,屬於靜態作用域的,靜態作用域是變數的作用域在語法解析的時候,就已經確定它的作用域了,確定完就無法再改變。

作用域

如果作用域裡找不到變數的時候,就會向外查找,找不到的時候就會報錯(not define)。

1
2
3
4
5
6
7
8
9
let value = 1
function num1(){
console.log(value); // 1
}
function num2(){
let value = 2;
num1();
}
num2(); // console.log 顯示 1

以上方為例,num1 找 value 時會往外層全域尋找,但是有一點非常的重要,就是它尋找的時候不會跟執行環境有任何的關聯性,因為JavaScript是語法作用域,在程式碼撰寫的時候就已經確定了它的作用域。num2 裡面的 value 作用域就只有在 num2 的函式裡面,所以不會影響到外面全域變數的 value 。


但是如果把 num2 變成下面這樣

1
2
3
4
5
6
7
8
9
let value = 1
function num1(){
console.log(value); // 1
}
function num2(){
value = 2;
num1();
}
num2(); // console.log 顯示 2

那 num2 的 value 就會影響到外面的變數,所以顯示就會變成 2。