我想知道是否可以将命名函数传递给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()中的回调,您可以对其进行引用,并保留括号。

08-18 21:43