函數(shù)中的變量作用域鏈
首先看一段代碼恩脂;
<script type="text/javascript">
function ad(){
var a=3;
ap();
function ap(){
console.log(a)
}
}
ad();//輸出的結(jié)果為3胚膊;
</script>
以上代碼并不想去考慮 這個邊量a 在做用域鏈中的位置 我們只討論他是否在作用域鏈內(nèi)部油够,根據(jù)結(jié)果a是在ap的函數(shù)鏈內(nèi)部下面圖解a的位置
ap.png
瘟则;
再看零一段代碼
var a='window';
function ad(){
var a=3;
ap(); //這個時候輸出的結(jié)果為 window
}
ad();
function ap(){
console.log(a)
}
那這時候有人會問了 調(diào)用ap的時候不是ad函數(shù)的內(nèi)部嗎為什么返回的值不是a
ap.png
根據(jù)上面的圖可清晰的認(rèn)識到ad 和ap是同屬于window下的方法ap無權(quán)訪問ad內(nèi)的變量所這里的a的值為‘window’;
那么看另外一段代碼
var a='window';
function ad(){
var a=3;
function ap(){
console.log(a)
}
}
ad();
ap();//報錯肃弟;
顯而易見之二段代碼是在外部想要訪問函數(shù)ad內(nèi)部的 函數(shù)ap顯然這是不現(xiàn)實的 因為函數(shù)ap在ad內(nèi)部相當(dāng)于一個局部變量耸黑。這里要注意的石函數(shù)的聲明提前也只能在他的所在的作用域內(nèi)提前并不能越級提前到他的作用域外部桃煎;