首頁 >web前端 >js教程 >JS兩種定義方式的差異、內部原理_基礎知識

JS兩種定義方式的差異、內部原理_基礎知識

WBOY
WBOY原創
2016-05-16 17:13:191143瀏覽

相信兩種方式大家都用過,但未必所有人都知道其 區別,內部原理。

複製程式碼 程式碼如下:

// 方式1
function func1(x,x, y){
// your code
}
// 方式2
var func2 = function(x,y){
// your code
}

方式1 是典型的函數宣告(Function declarations)。
方式2 是函數表達式(Function expressions),將一個匿名函數賦值給一個變數。或者說方式2中創建了一個具有形參為x,y的匿名函數,然後把該匿名函數賦值給變數func2。

其主要區別在於:
1,函數宣告需顯示的指定函數名,這裡是func1;函數表達式則使用匿名函數
2, 方式1在程式碼執行之前(解釋期)被載入到作用域中,方式2則需在程式碼執行時(運行期)載入

一個簡單範例就明白了它們在使用上的區別
複製程式碼 程式碼如下:

alert(func1); // --> func1原始碼
alert(func2); // - -> undefined
// 方式1
function func1(x,y){
// your code
}
// 方式2
var func2 = function(x,y ){
// your code
}

可以看到,第一次彈出的是func1的源碼,第二次卻是undefined。即採用方式1(函數宣告)定義函數,可以在該函數程式碼之上使用它,採用方式2(函數表達式)定義函數則不能在其定義前使用,只能在其定義後使用。

其內部涉及到 執行上下文(Execution context)及 啟動物件(Activation object)。想更深入了解的請閱讀EcmaScript 5文件。

最近發現越來越多的人喜歡使用方式2定義函數,尤其在巢狀函數中。如單純的定義一個函數個人還是習慣方式1。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn