1、function f(x){return x*x;}??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? //function函數(shù),調用function語句;
2、var f=new funtion{"x","y","var z=x*y;return z;"}??? ??? ??? //function()構造函數(shù),
3、var f=funtion(x){return x*x;}?? ?? ?? ?? ?? ?? ?? ? ?? ??? ??? ??? ??? ? //函數(shù)直接量

第1種方式是一個語句,而另2種方式則是由javascript的表達式創(chuàng)建的,可以作為一個表達式來使用,可以方便地用在多種場合。對于那些只要使用一次并且不用命名的函數(shù),就可以用第2,3種方式來創(chuàng)建。

第2種方式允許動態(tài)地建立和編譯一個函數(shù),這樣,我們使用函數(shù)時,就不用限制在function語句預編譯的函數(shù)體種。但是第2種方式創(chuàng)建的函數(shù)有個缺點,每次調用這個函數(shù),即是調用了function()構造函數(shù),都會解析函數(shù)體并且創(chuàng)建一個新的函數(shù)對象。如果這個函數(shù)要經常使用(例如用在循環(huán)體中),將會頻繁調用構造函數(shù),執(zhí)行效率就會非常低。

第3種方式創(chuàng)建的函數(shù)是程序結構的一個靜態(tài)部分,是一個表達式,可以用來定義匿名函數(shù)。用于循環(huán)體時,我們可以選擇第3種方式來創(chuàng)建函數(shù)。

第2種方式的函數(shù)主體"var z=x*y;return z;"是作為字符串存在的,每次調用構造函數(shù)時就會作為參數(shù)傳遞給function(),被解析和編譯一次。

第3種方式創(chuàng)建的函數(shù)只需要解析和編譯一次,就可以多次使用,函數(shù)主體是標準的javascript語法。

第2種方式創(chuàng)建的函數(shù)總是被當作頂級函數(shù)來編譯,下面這個摘錄自《javascript權威指南(第四版)》的列子可以說明:

var y="global";
function constructFunction(){
??? var y="local";
??? return new Function("return y;");
}
alert(constructFunction());?? ?? ?? ?? ?? ?? ?? //顯示global