Особенность Javascript в том, что вы можете вернуть функцию из функции.
function foo(){
return function() { console.log('Hello!'); }
}
console.log(foo()); //prints function bar () { console.log('Hello') }
foo()(); //prints Hello!
Так что, по сути, sortbyMultipleKeys(keys.slice(1))(a, b)
делает, вызывает функцию, которая была возвращена из функции sortbyMultipleKeys
.
function sortbyMultipleKeys(keys) {
return function(a, b) { //notice how this function is being returned
if (keys.length == ...
}
}
Если вы не понимаете, как работает sortbyMultipleKeys
, я предлагаю прочитать о «замыканиях».
Например, когда вы делаете
console.log(sortbyMultipleKeys(["alpha", "year"]))
, вы увидите, что функция напечатана.
/* prints: ƒ (a, b) {
if (keys.length == 0) return;
key = keys[0];
if (a[key] > b[key]) return 1;
else if (a[key] < b[key]) return -1;
else return sortbyMultipleKeys(keys.slice(1))(a, b);
} */
Обратите внимание, что переменная keys
существует в функции, даже если она доступна только в области действия sortbyMultipleKeys
. Но это работает отлично благодаря замыканиям. И это, вероятно, самая важная часть этого кода. Надеюсь, что помогло:)