因為ECMAScript中的函數(shù)名本身就是變量,所以函數(shù)也可以作為值來使用。也就是說,不僅可以像傳遞參數(shù)一樣把一個函數(shù)傳遞給另一個函數(shù),而且可以將一個函數(shù)作為另一個函數(shù)的結果返回。來看一看下面的函數(shù):
function callSomeFunction (someFunction, someArgument){
return someFunction(someArgument);
}
南昌網站建設公司技術人員提示:這個函數(shù)接受兩個參數(shù)。第一個參數(shù)應該是一個函數(shù),第二個參數(shù)應該是要傳遞給該函數(shù)的一個值.然后就可以像下面的例子一樣傳遞函數(shù)了:
function add10(num){
return num+10;
}
var result1 = callSomeFunction(addl0, 10);
alert(resultl); //20
function getGreeting (name){
return "Hello,"+name;
}
var result2 = callSomeFunction (getGreeting,"Nicholas");
alert(result2); //"Hello,Nicholas"
這里的SomeFunction()函數(shù)是通用的,即無論第一個參數(shù)傳遞進來的是什么函數(shù),它都會返回第一個參數(shù)后的結果。南昌網絡公司技術人員要提醒大家,還記得吧,要訪問函數(shù)的指針而不執(zhí)行函數(shù)的話,必須去掉函數(shù)名后面的那對圓括號。因此上面例子中傳遞給callSomeFunction()的是add10 和 getGreeting,而不是執(zhí)行它們之后的結果。
當然,可以從一個函數(shù)中返回另一個函數(shù),而且這也是極為有用的一種技術。例如,假設有一個對象數(shù)組,我們想要根據某個對象屬性對數(shù)組進行排序。而傳遞給數(shù)組sort()方法的比較函數(shù)要接收兩個參數(shù),即要比較的值??墒?,我們需要一種方式來指明按照哪個屬性來排序。要解決這個問題,可以定義一個函數(shù),它接收一個屬性名,然后根據這個屬性名來創(chuàng)建一個比較函數(shù),下面就是這個函數(shù)的定義。
function createComparisonFunction( propertyName) {
return function (objectl,object2){
var valuel=objectl[propertyName];
var value2=object2[propertyName];
if (valuel return -1;
else if (valuel>value2){
return 1;
else {
return 0;
}
};
}
這個函數(shù)看起來有點復雜,但實際上無非就是在一個函數(shù)中嵌套了另一個函數(shù),而且內部函數(shù)前面加了一個return操作符。在內部函數(shù)接收到propertyName參數(shù)后,它會使用方括號表示法來取得給定屬性的值。取得了想要的屬性值之后,定義比較函數(shù)就非常簡單了。上面這個函數(shù)可以像在下面例子中這樣使用:
var data= [{name: "Zachary", age: 28), tname: "Nicholas",age: 29}];
data. sort( createComparisonFunction("name"));
alert (data[data[0].name); //Nicholas
data. sort(createComparisonFunction("age"));
alert(data[O].name); //Zachary
這里,我們創(chuàng)建了一個包含兩個對象的數(shù)組data。其中,每個對象都包含一個name屬性和一個age屬性。在默認情況下,sort()方法會調用每個對象的toString()方法以確定它們的次序;但得到的結果往往并不符合人類的思維習慣。因此,我們調用createComparisonFunction(n name”)方法創(chuàng)建了一個比較函數(shù),以便按照每個對象的name屬性值進行排序。而結果排在前面的第一項是name為”Nicholas”,age是29的對象。然后,我們又使用了createComparisonFunction(”age”)返回的比較函數(shù),這次是按照對象的age屬性排序。得到的結果是name值為”Zachary”,age值是28的對象排在了第一位。
希望對廣大站長或網站建設公司或從事企業(yè)網站建設的團隊有所幫助,如對此不太理解的,可以與南昌網絡公司百恒網絡技術部聯(lián)系。我們很高與廣大站長和網站建設公司技術人員分享我們的技術和經驗。