變數提公升和執行環境物件

2022-03-10 09:53:24 字數 848 閱讀 3193

相關知識點:《單頁web應用》28頁,高程111頁以及underscore原始碼

高程111頁講過函式宣告和函式表示式的唯一區別:解析器會率先讀取函式宣告,並使其在執行任何**前可用;至於函式表示式,則必須等到解析器執行到它所在的**行,才會真正被解釋執行。看下面兩個例子:

alert(sum(10,10));    //

20function

sum(num1, num2)

alert(sum(10,10));    //

causes an error

var sum = function

(num1, num2);

然後我在看underscore原始碼的時候遇到了困惑的地方,提煉後的原始碼如下:

(function

() ;

root['_'] =_;

.....

(obj) ;

}).call(

this);

現在疑惑解決了,其實本身不是應該困惑的東西。咱們假設是按照常規的方式引入underscore.js腳步,我們自己寫的js**肯定是放在了underscore.js的後面,所以當瀏覽器讀到我們自己寫的**的時候,underscore的所有**已經執行了一遍。執行的具體細節,見下面。

(1)宣告並初始化函式引數。

(2)宣告區域性變數,包括將匿名函式賦值給乙個區域性變數(注:即函式表示式,此時是undefined),但並不初始化它們。

(3)宣告並初始化函式((注:確切的說是函式宣告函式)。

對於第二輪,該書只是說執行**,我認為不只是執行**,第二輪還包括初始化第一輪未初始化的區域性變數和函式表示式。

變數提公升和函式提公升

1.變數宣告提公升 通過var 定義 宣告 的變數,在定義語句之前就可以訪問到。值 undefined console.log a undefined var a 23 console.log a 23上面 等價於 var a 預編譯,將變數宣告提公升至當前作用域的頂端,初始值為undefined ...

變數提公升和函式提公升

首先js引擎在讀取js 時會進行兩個步驟,第乙個步驟是解釋,第二個步驟是執行。所謂解釋就是會先通篇掃瞄所有的js 然後把所有宣告提公升到頂端,第二步是執行,執行就是操作一類的。例子1 console.log a 輸出結果 undefined var a 10 script 以上 輸出 undefin...

javascript變數提公升和函式提公升

variable hoisting變數提公升是js比較有特點的地方,它允許你先使用變數,在其後面再進行變數宣告,不會丟擲 uncaught referenceerror異常。雖然變數被提公升到前面,但是它的預設值則是undefind,在引用的時候也使用這個值,知道在其面後進行賦值,在使用時候即為所贖...