預編譯四部曲
在函式裡面, js會建立ao物件,先找var 定義的值為undefined,形參先被定義為undefined,然後實參賦值undefined被覆蓋,然後再找有沒有函式體有則被覆蓋。
在全域性也是一樣,只是js建立的是go物件;
建立的ao和go物件的時候不看if,即使if裡面不執行,只要這個值有var 那就先給它定義為undefined
下面是例題`
function test(a,b)
var a;
b=234;
var b=function(){}
console.log(a)//123
console.log(b)//fn
}test(1)
test(1)執行過程
先建立ao物件
ao=然後找實參賦值
a0=然後找函式體賦值
ao=
JS 變數或函式的預編譯
1.變數的提前編譯 showname 變數提前 function showname 注 在以上 中,第乙個輸出只是宣告了a,並沒有進行初始化賦值,因此其值為undefined,在這裡稱為預編譯。2.函式的提前編譯 1 如上 中的showname 從上向下執行,先執行showname 但按理說這個方法...
js 變數 函式提公升 與js的預編譯有關
參考 先簡單理解下作用域的概念,方便對變數與函式提公升的概念的理解 function foo console.log x foo 2 結果為2,可見js中並沒有塊級作用域的概念 可以使用下面的方法創造自己的作用域,這樣不會干擾到外部變數 function foo console.log x foo ...
求解 js函式在預編譯期間的謎
先看這麼一句話 在js預編譯期,僅僅是對函式的名稱 函式內部的各種識別符號進行檢索,並建立索引 根據上述,我們看看示例 示例1 function test6 2 預編譯時,被函式a替換,疑問 在函式a後面繼續宣告有a變數,不過這個變數似乎優先順序不夠?alert a var a abc functi...