深入理解作用域鏈
阿新 • • 發佈:2021-06-16
- 為了更好的理解作用域鏈,有以下程式碼示例:
var a = 'aaa' try{ console.log('1',a,b,c,d); }catch(err){ console.log('1',err); } function fn1(){ var b = 'bbb' try{ console.log('2',a,b,c,d); }catch(err){ console.log('2',err); } function fn2(){ var c = 'ccc' try{ console.log('3',a,b,c,d); }catch(err){ console.log('3',err); } function fn3(){ var d = 'ddd' try{ console.log('4',a,b,c,d); }catch(err){ console.log('4',err); } } fn3() } fn2() } fn1()
分析一下:
此段程式碼涉及4個全域性上下文,分別是 全域性上下文,fn1()區域性上下文,fn2()區域性上下文,fn3()區域性上下文
全域性上下文有一個a變數,一個fn1()函式
fn1()區域性上下文有一個b變數,一個fn2()函式
fn2()區域性上下文有一個c變數,一個fn3()函式
fn3()區域性上下文有一個d變數
看一下以上程式碼的輸出:
讓我來畫個圖便於理解:
即查詢變數時會沿著作用域鏈向上查詢,而不是向下查詢,且找到最近的就會停止(就近原則)