函式預編譯,弄懂每個變數的值

2021-09-26 06:22:46 字數 472 閱讀 1339

預編譯四部曲

在函式裡面, 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...