在JavaScript中使用函数名作为另一个函数的参数是如何合法的?

时间:2010-02-02 16:36:59

标签: javascript

我正在准备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

7 个答案:

答案 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中的变量可以包含任何类型的值,包括函数。如果使用不带括号的函数名称,则引用该函数,而不是实际调用它。