函数作为值
因为 ES 中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,也可以将函数作为另一个函数的结果返回。
理解上面的这段话是很有必要的,这两种方式都可以让我们更有效的解决一些特定的问题。
1. 函数作为参数
// 可以用来调用一个函数并给它传递一个参数,来获得第一个返回值。
function callSomeFunction(someFunction, someArgument){
return someFunction(someArgument);
}
function add(num) {
return num + 10;
}
function get(str) {
return "hello," + str;
}
var result = callSomeFunction(add, 20);
var string = callSomeFunction(get, "talon");
alert(result); // 30
alert(string); // hello,talon
2. 函数作为返回值
将函数作为返回值也是非常有用的,比如我们在使用 sort ( ) 方法来按照对象的某个属性排序时,要给 sort ( ) 传递的参数函数就有很多种,而使用将函数作为返回值的方法就可以解决这个问题。
function createComparisonFunction(propertyName) {
return function(obj1, obj2) {
var value1 = obj1[propertyName];
var value2 = obj2[propertyName];
if(value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
};
}
var data = [
{name: "talon", age: 20},
{name: "zjaya", age: 19}
];
// 按 name 属性排序
data.sort(createComparisonFunction("name"));
alert(data[0].name) // talon
// 按 age 属性排序
data.sort(createComparisonFunction("age"));
alert(data[0].name) // zjaya