大侠们帮忙看下这段程序:function createComparisonFunction(propertyName) {
return function(object1, object2) {
var value1 = object1(propertyName);
var value2 = object2(propertyName); if(value1 < value2) {
return -1;
}else if(value1 > value2) {
return 1;
}else {
return 0;
}
}
}var data = [{name: "zar", age: 26}, {name: "nich", age: 24}];data.sort(createComparisonFunction("name"));
alert(data[0].name); //nich
不太明白createComparisonFunction函数里的内部函数object1和object2参数是怎么传进去的,请高手详细解答一下原理,不要只是这是规定的这么简单的解答,谢谢!
return function(object1, object2) {
var value1 = object1(propertyName);
var value2 = object2(propertyName); if(value1 < value2) {
return -1;
}else if(value1 > value2) {
return 1;
}else {
return 0;
}
}
}var data = [{name: "zar", age: 26}, {name: "nich", age: 24}];data.sort(createComparisonFunction("name"));
alert(data[0].name); //nich
不太明白createComparisonFunction函数里的内部函数object1和object2参数是怎么传进去的,请高手详细解答一下原理,不要只是这是规定的这么简单的解答,谢谢!
其实它返回给你的是一个function
即 function(object1, object2) {
var value1 = object1(propertyName);
var value2 = object2(propertyName); if(value1 < value2) {
return -1;
}else if(value1 > value2) {
return 1;
}else {
return 0;
}
而array的sort方法可以接收一个function参数,它正好可以有2个参数,就是obj1和obj2,这样就明白点了吧
...
}
函数createComparisonFunction()只是为返回一个 比较函数compare函数
于是函数可以写成
return function compare(value1, value2){
var v1 = value1[propertyName];
var v2 = value2[propertyName];
if(v1 < v2){
return -1;
}else if(v1 > v2){
return 1;
} else{
return 0;
}
};
compare比较函数有两个参数value1,value2,就相当于这里object1、object2.
之所以使用了createComparisonFunction()函数,只是为了传一个函数参数propertyName。
相信你应该明白了吧。