Сообщение от Kolyaj
|
При сортировке используется алгоритм быстрой сортировки, при котором сравниваются не все пары чисел. Callback-функция будет вызвана не один раз.
|
Т.е. сам sort вызывает эту функцию много (сколько нужно) раз? А программисту достаточно указать один раз sort(foo())?
Вот что сам Флэнэган пишет по этому поводу:
"Для сортировки в какомлибо ином порядке, отличном от алфавитного, можно
передать методу sort() в качестве аргумента функцию сравнения. Эта функция
устанавливает, какой из двух ее аргументов должен присутствовать раньше в от
сортированном списке. Если первый аргумент должен предшествовать второму,
функция сравнения возвращает отрицательное число. Если первый аргумент
в отсортированном массиве должен следовать за вторым, то функция возвращает число, большее нуля. А если два значения эквивалентны (т. е. порядок их рас
положения не важен), функция сравнения возвращает 0."
var a = [33, 4, 1111, 222];
a.sort(); // Алфавитный порядок: 1111, 222, 33, 4
a.sort(function(a,b) { // Числовой порядок: 4, 33, 222, 1111
return a-b; // Возвращает значение < 0, 0, или > 0
}); // в зависимости от порядка сортировки a и b
Откуда тут вообще взялись a и b? Они же нигде явно не определялись.
Понятно, что они как то берутся из массива, но как?