十年专注于品牌网站建设 十年专注于品牌网站建设,低调、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

作为值的函数即将函数作为值使用的方法和实例

百恒网络 2012-09-04 1286

因为ECMAScript中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。来看一看下面的函数:

function callSomeFunction (someFunction, someArgument){

return someFunction(someArgument);

}

南昌网站建设公司技术人员提示:这个函数接受两个参数。第一个参数应该是一个函数,第二个参数应该是要传递给该函数的一个值.然后就可以像下面的例子一样传递函数了:

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()函数是通用的,即无论第一个参数传递进来的是什么函数,它都会返回第一个参数后的结果。南昌网络公司技术人员要提醒大家,还记得吧,要访问函数的指针而不执行函数的话,必须去掉函数名后面的那对圆括号。因此上面例子中传递给callSomeFunction()的是add10 和 getGreeting,而不是执行它们之后的结果。

当然,可以从一个函数中返回另一个函数,而且这也是极为有用的一种技术。例如,假设有一个对象数组,我们想要根据某个对象属性对数组进行排序。而传递给数组sort()方法的比较函数要接收两个参数,即要比较的值。可是,我们需要一种方式来指明按照哪个属性来排序。要解决这个问题,可以定义一个函数,它接收一个属性名,然后根据这个属性名来创建一个比较函数,下面就是这个函数的定义。

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;

}

};

}

这个函数看起来有点复杂,但实际上无非就是在一个函数中嵌套了另一个函数,而且内部函数前面加了一个return操作符。在内部函数接收到propertyName参数后,它会使用方括号表示法来取得给定属性的值。取得了想要的属性值之后,定义比较函数就非常简单了。上面这个函数可以像在下面例子中这样使用:

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

这里,我们创建了一个包含两个对象的数组data。其中,每个对象都包含一个name属性和一个age属性。在默认情况下,sort()方法会调用每个对象的toString()方法以确定它们的次序;但得到的结果往往并不符合人类的思维习惯。因此,我们调用createComparisonFunction(n name”)方法创建了一个比较函数,以便按照每个对象的name属性值进行排序。而结果排在前面的第一项是name为”Nicholas”,age是29的对象。然后,我们又使用了createComparisonFunction(”age”)返回的比较函数,这次是按照对象的age属性排序。得到的结果是name值为”Zachary”,age值是28的对象排在了第一位。

希望对广大站长或网站建设公司或从事企业网站建设的团队有所帮助,如对此不太理解的,可以与南昌网络公司百恒网络技术部联系。我们很高与广大站长和网站建设公司技术人员分享我们的技术和经验。


400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×