兩個作用域
函數定義時確定
1.全局作用域
2.函數作用域
作用:隔離變量,不同作用域下同名變量不會有衝突
JS中沒有塊級作用域
兩個上下文(或稱爲詞法環境)
執行過程中產生
1.全局上下文:一個JS文件有且僅有一個
2.函數上下文:每調用一次產生一個上下文,調用完畢後銷燬
作用:預編譯過程中存儲預處理數據
運行的兩個步驟
1.預編譯過程
預處理數據包括:
1.var對象:var a=10; —預處理—> var a=undefine
2.function : function fun(){} —預處理—> function fun=function(){}
(只有聲明方式定義的函數有效,如上)
3.this
命名衝突時,function優先級最高
2.執行過程
命名衝突時,後面的覆蓋前面的
預編譯完成後:1.爲所有變量賦值
2.忽略聲明方式定義的函數聲明方式定義的函數,只處理表達式方式定義的函數,eg:
(function fun(){})();//稱爲自執行函數或立即執行函數
備註:表達式方式定義的函數,即在函數前面加個基本運算符,eg:+ - * / ? () 等等