JS作用域和預編譯

2022-03-15 16:35:42 字數 439 閱讀 9048

js在頁面載入過程中順序執行。但是分塊預編譯、執行。

js在執行前會進行類似」預編譯」的操作,而且先預宣告變數再預定義函式。

此時注意,是宣告,不是定義,如:var a = 1; 在預編譯中,只是執行了」var a」沒有賦值,即在預編譯結束時a 為undefined。

(注意)並不是先全文編譯完在執行,而是塊編譯,即乙個script塊中,預編譯再執行,然後(按順序)下乙個script塊,預編譯再執行,但此時上乙個塊中的資料都是可以用的,但下乙個塊中的函式,宣告的變數都是不可用的。

變數沒宣告就引用,會報錯,但物件方法,物件變數沒宣告,是undefined

在函式中變數不宣告就賦值,會被認為是全域性變數,用var宣告後為函式變數

在執行函式時時也是先編譯後執行,但要注意函式定義中(即大括號中)的**即使有錯只要函式不執行,就不會有影響,但一執行函式,開始函式預編譯就會出錯。

js的預編譯 作用域鏈

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

JS預編譯 函式預編譯和全域性預編譯

預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...

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

var bar 1 function foo bar foo 2 console.log bar 1預編譯 1,建立ao go 物件 2,找形參和變數宣告,把形參和變數宣告的名字作為ao的屬性名,值統一為undefined 3,形參實參相統一 4,函式宣告整體提公升,函式名作為ao屬性名 函式名有重...