範圍(Scope)/範圍鏈(Scope chain)
我流直接結論:函數從詞彙環境Lexical environment(函數被寫著的地方,也就是函數的外層外部環境啦)尋找變數的過程(軌跡路線之類的)。
可能會很長因為外部環境也不一定能找到,所以要往外部環境的外部環境一直找.......
範圍(Scope)
Where a variable is available in your code
And if it’s truly the same variable, or a new copy
範圍是變數可以被取用的區域。
//fn b被寫在window中,此時它的詞彙環境(Lexical environments)是windowfunction b() {
console.log(myVar); } //myVar = 1,參照全域的myVarfunction a() {
myVar = 2
b();
}var myVar = 1;
a();
此例中,因為在 b 中未賦值myVar,所以在 b 的執行環境(execution context)中找不到 myVar 的值,要參照它的外部環境(reference to the outer environment)。
那麼,如何決定要參照哪個外部環境呢?就看 b 所處的詞彙環境(Lexical environments),b 被寫在 window 中,此時它的物部環境是window,此處myVar = 1,因此console.log(myVar)=1。