我正在准备Javascript,在W3Schools阅读教程并遇到了这段代码:
function sortNumber(a, b)
{
return a - b;
}
var n = ["10", "5", "40", "25", "100", "1"];
document.write(n.sort(sortNumber));
它对数组中的元素进行排序,非常简单。但是我们如何将sortNumber
(函数名)作为参数传递给sort函数?
The original example
答案 0 :(得分:4)
But how can we pass sortNumber ( a function name) as a parameter to the sort function?
JS中的函数是first-class objects,可以作为参数或变量传递。你清楚排序本身是如何工作的吗?
答案 1 :(得分:3)
令人惊讶的是,JavaScript源于一种名为Scheme的语言。
Scheme允许传递某些函数(称为“lambda函数”),就好像它们是变量一样。
JavaScript以与方案相同的方式处理函数。 (有人说“功能是JavaScript中的一流公民。”)
例如,您可以写:
// Assign a function to foo
var foo = function () { alert('bar'); };
// Call foo like a function
foo();
结果是显示消息“bar”。
lambda的典型例子是“加法器”示例:
adder = function (x) {
return function (y) {
x + y
}
};
add5 = adder(5);
add5(1); // == 6
希望这有帮助。
答案 2 :(得分:2)
如果您查看Javascript中sort
函数的documentation,它接受的参数(可选)是一个可用于确定排序的函数。
该函数返回正值,负值或零值,允许sort函数确定所需的一切。
答案 3 :(得分:1)
您实际上是在传递对函数本身的引用,而不是它的名称。如果你传递了它的名字,你可以用引号括起来:“sortNumber”。
sort() (as the documentation says)接受一个指定排序函数的可选参数。
答案 4 :(得分:1)
函数是javascript中的一等公民。
排序可以采用可选的参数,一个返回-1,0或1的函数(无论是更大,等于或小于b)
使用a-b返回正数,零或负数,以执行此操作。
答案 5 :(得分:0)
W3Schools也提供了答案: http://www.w3schools.com/jsref/jsref_sort.asp
Array sort()方法接受一个参数,它是一个函数处理程序。
答案 6 :(得分:0)
javascript中的变量可以包含任何类型的值,包括函数。如果使用不带括号的函数名称,则引用该函数,而不是实际调用它。