作用域鏈:
JavaScript的每個函數function都有自己的作用域,使用Active Object(簡稱AO)活動對象來保存,在相互嵌套的函數中形成了作用域鏈,如圖:
作用域鏈就是從裏到外的AO鏈
變量的尋找:
函數fn3中使用的變量,如在fn3作用域內尋找不到,則往外層fn2作用域尋找,以此類推,直到全局對象window
代碼演示:
var c = 5;
function t1(){
var d = 6;
function t2(){
var e = 7;
var d = 3;//如果在這裏聲明的var d = 3,那麼函數就不在向外尋找變量d,輸出的值爲15
console.log(c+d+e);
}
t2();
}
t1();
瞭解了JavaScript作用域鏈後,在函數裏面使用頻率較高的外部變量,最好先將外部變量保存爲局部變量後,再進行操作,這樣就大大減少通過作用域鏈查找變量的時間。