JavaScript基礎概念之----作用域鏈
阿新 • • 發佈:2018-10-14
span tro 閉包 str clas 作用域鏈 function UNC 決定
也稱:詞法作用域
JavaScript查找變量關聯的值時,會遵循一個查找鏈,這個鏈是基於作用域的層次結構的。
var a = ‘hello‘; var func1 = function(){ var func2 = function(){ console.log(a); } } //hello
如上圖,查找過程如下:
1、在func2函數中查找變量a,如果找到了,直接輸出值,如果沒有找到,轉到第2步
2、在func2的父函數 func1函數中繼續查找,如果找到了,直接輸出值,如果沒有找到,轉到第3步
3、繼續在全局作用域中查找,如果找到了,直接輸出值,如果沒有找到,輸出undefined
作用域鏈查找 返回第一輪值。當在作用域鏈內最近位置查到變量時,查找即結束,不管作用域鏈頂部是否還有相同的變量名稱
var a = 1;
var func1 = function(){ var a = 2; var func2 = function(){ var a = 3; console.log(a);//輸出 3。局部變量a在作用域內是第一個被查找到的,因此不再查找其余的 } }
作用域鏈 是根據函數定義時的位置決定的,而不是在調用時確定的。
正因為 作用域鏈是在函數調用之前創建,所以才可以創建閉包。
JavaScript基礎概念之----作用域鏈