9 26 預編譯與函式作用域問題

2021-10-09 19:41:17 字數 396 閱讀 4291

var bar =1;

function

foo(bar)

foo();

//2 console.

log(bar)

;//1

預編譯

1,建立ao(go)物件

2,找形參和變數宣告,把形參和變數宣告的名字作為ao的屬性名,值統一為undefined

3,形參實參相統一

4,函式宣告整體提公升,函式名作為ao屬性名(函式名有重複的屬性名不變),屬性值為函式的函式體本身

go =

}然後執行函式:執行foo()時候會在foo()自己的ao裡面尋找bar,所以第一次輸出2,雖然未定義,但是在函式預編譯中,他仍屬於foo()的ao,預編譯之後才是函式的執行。

JS作用域和預編譯

js在頁面載入過程中順序執行。但是分塊預編譯 執行。js在執行前會進行類似 預編譯 的操作,而且先預宣告變數再預定義函式。此時注意,是宣告,不是定義,如 var a 1 在預編譯中,只是執行了 var a 沒有賦值,即在預編譯結束時a 為undefined。注意 並不是先全文編譯完在執行,而是塊編譯...

js的預編譯 作用域鏈

預編譯發生在函式執行的前一刻 全域性下面 函式裡面 1.js三步驟 首要先做語法分析,若有明顯的低階錯誤語法,就直接報錯,所有 均不執行 預編譯 解釋執行 解釋一行,執行一行。2.函式中的預編譯執行步驟 函式執行的前一刻發生預編譯 step1 建立ao物件,執行期上下文 step2 找到形參和變數宣...

mysql閉包的作用域 預編譯 閉包 作用域鏈

預編譯 先go後ao ao執行順序先形參定義 變數提公升 形參實參統一 函式提公升並且定義賦值 閉包函式內部 return 乙個內部函式被外部變數接收 外部變數可以使用內部函式 ao 中的值 閉包的好處是可以防止全域性變數汙染,但是閉包多了也會有記憶體洩漏的風險function test1 var ...