每個函數都是 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() 要求的函數。