JavaScript如何理解函式可以作為值
阿新 • • 發佈:2018-12-15
函式作為值
因為 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