相關知識點:《單頁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,在引用的時候也使用這個值,知道在其面後進行賦值,在使用時候即為所贖...