預編譯發生在函式執行的前一刻
全域性下面:
函式裡面:
1.js三步驟
首要先做語法分析,若有明顯的低階錯誤語法,就直接報錯,所有**均不執行;
預編譯;
解釋執行:解釋一行,執行一行。
2.函式中的預編譯執行步驟
函式執行的前一刻發生預編譯
step1:建立ao物件,執行期上下文;
step2:找到形參和變數宣告,將形參和變數宣告放到ao物件裡,且值為undefined;
step3:形參和實參相統一,就是更改形參後的undefined為具體的形參值;
step4:找函式裡面的函式宣告,值為函式體;
function fn (a, b, c)
var a = function () {}//函式表示式
b = 100;
var b;
console.log(b);
console.log(a);
console.log(c);
} fn(2, 6);
演示一下執行步驟的詳細分析過程
ao
-step2:找到形參和變數宣告,將形參和變數宣告放到ao物件裡,且值為undefined;
ao
ao
ao,
b:100,
c:function c () {}
}
函式執行完成,ao物件就會被銷毀。
全域性中的預編譯
全域性當中的預編譯與函式中的預編譯相似,第一步就是建立go物件,第二步找到變數宣告,與函式中的預編譯不同之處,在於沒有形參與實參的相統一。
暗示全域性變數
來看例項:
function fn ()
例項中變數b未宣告就被賦值了999,所以屬於window。
function f1()
f3();
}f2();
} f1();
數定義的時候產生go,函式執行前產生go,作用域鏈如下
關於JS中函式預編譯 作用域的幾點筆記記錄
兩者結合的通常就是一些地方列印出來的結果會出人意料,與預期不符。基礎是作用域,在es5中作用域只有全域性作用域和函式所代表的區域性作用域 es6中才有 塊級作用域 所以常常有區域性作用域中的隱式全域性變數會影響函式外部的隱式全域性變數值 但是如果是使用var宣告就不會受影響。接下來是瀏覽器解析js預...
JS作用域和預編譯
js在頁面載入過程中順序執行。但是分塊預編譯 執行。js在執行前會進行類似 預編譯 的操作,而且先預宣告變數再預定義函式。此時注意,是宣告,不是定義,如 var a 1 在預編譯中,只是執行了 var a 沒有賦值,即在預編譯結束時a 為undefined。注意 並不是先全文編譯完在執行,而是塊編譯...
理解Vue中的 編譯作用域
先來考慮下面的 是否最終是可以渲染出來的 中,我們使用了isshow屬性。isshow屬性包含在元件中,也包含在vue例項中。答案 最終可以渲染出來,也就是使用的是vue例項的屬性。為什麼呢?官方給出了一條準則 父元件模板的所有東西都會在父級作用域內編譯 子元件模板的所有東西都會在子級作用域內編譯。...