文章出處

  在js中的執行上下文,菜鳥入門基礎 這篇文章中我們簡單的講解了js中的上下文,今天我們就更進一步的講解js中的執行上下文。

1、當遇到變量名和函數名相同的問題。

var a = 10;
function a(){
    console.log(1);
}
a(); //報錯

  如果你覺得函數a會覆蓋變量a那你肯定是js的新朋友,為什么這里會報錯呢?我記得我在基礎的執行上下文文章中說過變量聲明提前的概念,對這里就是因為這個原因,但是在上面一篇文章中還有一個問題我沒有去講。

  那就是函數的聲明比變量的聲明順序更早,上面那段代碼相當于下面這段代碼:

function a(){
    console.log(1);
}
var a = undefined;
a = 10;
a();

函數a被變量a覆蓋了。

  2.當函數在另外一個函數中調用的時候

var a = 1;
function fn1(){
    console.log(a);
}
function fn2(){
    fn1();
}
a = 2;
fn2(); //2

  這里沒有輸出1是因為fn1嵌套在fn2中,所以函數fn2沒有執行的話,fn1自然也沒有被執行,又因為fn2是在a賦值為2以后才執行的所以fn1打印的就是2,此時a的值就是2。

到這里,關于js的執行上下文就可以告一段落了,當然如果后期遇到其他的問題,會繼續更新到這一文章中,之所以這一章講解的比較簡單是因為有上面一節的基礎。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()