文章出處
文章列表
在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的執行上下文就可以告一段落了,當然如果后期遇到其他的問題,會繼續更新到這一文章中,之所以這一章講解的比較簡單是因為有上面一節的基礎。
文章列表
全站熱搜