定義
Function類可以表示開發者定義的任何函數,用Function類直接創建函數的語法如下:
var function_name=new Function(agrument1,agrument2,...,argumentN,function_body);
每個argument都是一個參數,最后一個參數是函數主體(要執行的代碼)。
示例:
代碼如下:
function sayHi(sName,sMessage){
alert("Hello "+sName+","+sMessage);
}
還可以如下定義它:
var sayHi=new Function("sName","sMessage","alert(\"Hello\"+sName+\",\"+sMessage);");
注:盡管可用Function構造函數創建函數,但最好不要使用它,因為用它定義函數比用傳統方式要慢得多。不過,所有函數都應看作是Function類的實例。
屬性和方法
因為函數是引用類型,所以它們也有屬性和方法,ECMAScript定義的屬性length聲明了函數期望的參數個數,例如:
代碼如下:
function doAdd(iNum){
alert(iNum+10);
}
function sayHi(){
alert("Hi");
}
alert(doAdd.length);//outpus 1
alert(sayHi.length);//outpus 0
Function對象也有與所有對象共享的標準valueOf()方法和toString()方法,這兩個方法返回的都是函數的源代碼,在調試時尤其有用。
例如:
代碼如下:
function doAdd(iNum){
alert(iNum+10);
}
alert(doAdd.toString());
這段代碼輸出了doAdd()函數的文本。
閉包
定義
所謂閉包,是指詞法表示包括不必計算的變量的函數,也就是說,該函數能使用函數外定義的變量。在ECMAScript中使用全局變量是一個簡單的閉包實例。
示例:
代碼如下:
var sMessage="Hello World";
function sayHelloWold(){
alert(sMessage);
}
sayHelloWorld();
在一個函數中定義另一個函數會使閉包變得更復雜,如:
代碼如下:
var iBaseNum=10;
function addNumbers(iNum1,iNum2){
function doAddtion(){
return iNum1+iNum2+iBaseNum;
}
return doAddtion();
}
這里函數addNumbers()包括函數doAddtion()(閉包)。內部函數是個閉包,因為它將獲取外部函數的參數iNum1和iNum2以及全局變量iBaseNum的值。addNumbers()的最后一步調用了內部函數,把兩個參數和全局變量相加,并返回它們的和。這里要掌握的重要概念是doAddtion()函數根本不接受參數,它使用的是從執行環境中獲取的。
可以看到,閉包是ECMAScript中非常強大多用的一部分,可以用于執行復雜的計算。就像使用任何高級函數一樣,在使用閉包時要當心,因為它們可能會變得非常復雜。
本文示例代碼
代碼如下:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com