詞法作用域和動態作用域


詞法作用域和動態作用域

1、作用域:

作用域是指程序代碼中定義變量的區域

JavaScript采用詞法作用域,也就是靜態作用域

2、詞法作用域和動態作用域

因為JavaScript采用的是詞法作用域,函數的作用域在函數定義的時候就決定了。

而與詞法作用域對應的是動態作用域,函數的作用域是在函數調用的時候才決定的。動態作用域並不關心函數和作用域是如何聲明以及在何處聲明的,只關心他們從何處調用。換句話說,作用域鏈是基於調用棧的,而不是代碼中的作用域嵌套。

 

var value = 1;
function foo() {
    console.log(value);
}
function bar() {
    var value = 2;
    foo();
}
bar();
// 結果是???

 

假設JavaScript采用靜態作用域,分析執行過程:

執行foo()函數,先從foo函數內部查找是否有局部變量value,如果沒有,就根據書寫的位置查找上一層的代碼,也就是value 等於 1,所以結果會打印 1 。

假設JavaScript采用動態作用域,分析執行過程:

執行foo()函數,依然是從foo函數內部查找是否有局部變量value,如果沒有,就從調用函數的作用域也就是bar()函數內部查找value變量,所以結果會打印 2 。

前面已經說了,JavaScript采用的是詞法作用域,所以這個例子結果是1

參考文章:https://www.cnblogs.com/xiaohuochai/p/5700095.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM