查了好多資料,發現還是不全,幹脆自己整理吧,至少保證在我的做法正确的,以免誤導讀者,也是給自己做個記錄吧!
定義函數的方法重要包含3種:function 語句、函數直接量、Function()構造函數(代碼格式比較如下)
//應用function語句編織函數
function f(x){
return x;
}
//應用函數直接量直接生成函數
var f = function(x){
return x;
}
//應用Function()構造函數克隆函數
var f = new Function("x","return x;");
現在比較前兩種定義函數方法的差別:
方法1 是典型的函數聲明
方法2 是函數表達式
每日一道理
天又快黑了,這座忙碌的城市又将入睡,讓這勞累的“身軀”暫别白日的辛勤,讓它入睡,陪伴着城市中的人們進入夢鄉。當空的彎月正深情地注視着這座城市與城市中的人們,看着家家戶戶的燈漸漸熄滅,它在床頭悄悄奏響“明月曲”……
其重要差別在于:
1、函數聲明需表現的指定函數名,這裡是f 函數表達式則應用匿名函數
2、方法1在代碼執行之前(解釋器)被加載到作用域中,方法2則需在代碼執行時(運作期)加載
下面一個例子說明他們的差別
alert(f1); //f1源碼
alert(f2); //undefined
function f1(){
var i = 10;
}
var f2 = function(){
var j = 10;
}
//如果放在函數聲明之後
alert(f1); //f1源碼
alert(f2); //f2源碼
可以看到,第一次彈出的是f1源碼,第二次倒是undefined。即采取方法1定義函數,可以在該函數代碼之上應用它,采取方法2定義函數則不能在其定義前應用,隻能在其定義後應用。