在js中的執行上下文,菜鳥入門基礎 這篇文章中我們簡單的講解了js中的上下文,今天我們就更進一步的講解js中的執行上下文。
1、當遇到變數名和函式名相同的問題。
var a = 10;
function
a()a();
//報錯
如果你覺得函式a會覆蓋變數a那你肯定是js的新朋友,為什麼這裡會報錯呢?我記得我在基礎的執行上下文文章中說過變數宣告提前的概念,對這裡就是因為這個原因,但是在上面一篇文章中還有乙個問題我沒有去講。
那就是函式的宣告比變數的宣告順序更早,上面那段**相當於下面這段**:
function
a()var a =undefined;
a = 10;
a();
函式a被變數a覆蓋了。
2.當函式在另外乙個函式中呼叫的時候
var a = 1;
function
fn1()
function
fn2()
a = 2;
fn2();
//2
這裡沒有輸出1是因為fn1巢狀在fn2中,所以函式fn2沒有執行的話,fn1自然也沒有被執行,又因為fn2是在a賦值為2以後才執行的所以fn1列印的就是2,此時a的值就是2。
到這裡,關於js的執行上下文就可以告一段落了,當然如果後期遇到其他的問題,會繼續更新到這一文章中,之所以這一章講解的比較簡單是因為有上面一節的基礎。
JS高階(6) 執行上下文與執行上下文棧
一 變數提公升和函式提公升 變數宣告提公升 函式宣告提公升 面試題 輸出 undefined undefined 變數提公升 fn2 可呼叫 函式提公升 fn3 不能 變數提公升 二 執行上下文 分類 根據位置分 全域性執行上下文 開始執行全域性 函式執行上下文 開始執行函式體 三 執行上下文棧 在...
js高階 執行上下文棧
就是用來存全域性上下文物件和函式上下文物件的棧容器。在全域性 執行之前,js引擎就會建立乙個棧容器來儲存管理所有的執行上下文物件。在全域性執行上下文 window 確定後,將其新增到棧中 壓棧 在函式執行上下文建立後,將其新增到棧中壓棧 在當前函式執行完後,將棧頂的物件移除 出棧 當所有的 執行完後...
js執行上下文與執行上下文棧
在了解js的執行上下文物件與執行上下文棧之前,我們要先了解兩個概念 即變數提公升跟函式提公升 變數提公升 通過var定義的變數,在定義語句之前我們就可以直接訪問到,不過它的值是undefined 函式提公升 通過function定義的函式,在函式定義語句前,我們就可以直接呼叫 變數提公升與函式提公升...