每个函数都是 Function 对象的实例,函数名是一个指向函数对象的指针。
所以可以从一个函数中返回另一个函数。
sort() 方法的参数是一个比较函数,接收两个参数,即比较的值。
function createComparisonFunction(propertyName) {
// 为什么要在内部添加一个函数,而不是直接进行操作?
return function(object1, object2){ // 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: "Zachary", age: 28}, {name: "Nicholas", age: 29}];
data.sort(createComparisonFunction("name"));
alert(data[0].name); //Nicholas
data.sort(createComparisonFunction("age"));
alert(data[0].name); //Zachary
两个疑问:
1、object1 和 object2 是怎么取到值的?
数组的sort() 方法接收一个比较函数作为参数,该函数有两个参数,分别为待比较的两个值,即object1 和 object2。
2、为什么要在内部添加一个函数,而不是直接进行操作?
这里的 createComparisonFunction() 函数需要一个参数来指定比较排序的依据,不能直接作为sort() 需要的比较参数。所以返回一个符合sort() 要求的函数。