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
。首先,a
和 b
没有定义,所以它抛出 (ReferenceError
)。
但是如果定义了 a
和 b
呢?表达式 sortAscending(a,b)
的结果不是函数。
要让事情正常进行,您必须使用代码 myArray.sort(sortAscending);
- 它传递一个函数作为参数。
我想知道是否可以将命名函数传递给 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
。首先,a
和 b
没有定义,所以它抛出 (ReferenceError
)。
但是如果定义了 a
和 b
呢?表达式 sortAscending(a,b)
的结果不是函数。
要让事情正常进行,您必须使用代码 myArray.sort(sortAscending);
- 它传递一个函数作为参数。