克服JS奇怪的部分_範圍、範圍鏈

Huang Pei
2 min readApr 24, 2019

--

範圍(Scope)/範圍鏈(Scope chain)

本筆記出自:JavaScript 全攻略:克服 JS 的奇怪部分

我流直接結論:函數從詞彙環境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,參照全域的myVar
function 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。

執行環境取得的變數環境不必是正下方的執行環境,本例a雖然呼叫b,但並不是b的詞彙環境

--

--

Huang Pei
Huang Pei

Written by Huang Pei

記錄用倉庫,歡迎指正。菜鳥前端,最菜的那種(超能力少女です)。

No responses yet