JavaScript 命名排序函数

JavaScript named sort function

我想知道是否可以将命名函数传递给 Array.sort()。我正在尝试做类似下面逻辑的事情,但显然它抱怨 a 没有被定义。

if (iWantToSortAscending) {
    myArray.sort(sortAscending(a, b));
} else {
    myArray.sort(sortDescending(a, b));
}

// my lovely sort functions
function sortAscending(a, b) {
    ...
    sorty worty
    ...
}

function sortDescending(a, b) {
    ...
    sorty worty differently
    ...
}

显然我可以让代码像下面这样工作,而且确实如此,但为了可读性和调试,我宁愿不使用匿名函数。

if (iWantToSortAscending) {
    myArray.sort(function (a, b) {
        ...
        sorty worty
        ....
    }
} else {
    ...

确实如此,但您必须引用该函数,而不是调用它,并且参数是自动传递的

myArray.sort(sortAscending);

无论何时向函数添加括号和参数,它都会立即被调用。
当您希望它被另一个函数调用时,例如作为 sort() 中的回调,您可以引用它,并省略括号。

想想"what is my program doing?"

myArray.sort(sortAscending(a, b));

它有什么作用?它尝试用表达式 sortAscending(a,b) 的结果调用 myArray.sort。首先,ab 没有定义,所以它抛出 (ReferenceError)。 但是如果定义了 ab 呢?表达式 sortAscending(a,b) 的结果不是函数。

要让事情正常进行,您必须使用代码 myArray.sort(sortAscending); - 它传递一个函数作为参数。