f()()
вызывает функцию с именем f
, которая, предположительно, возвращает функцию, а затем окончательный ()
вызывает эту функцию. Например,
const f = () => {
console.log('first invoke');
return () => console.log('second invoke');
};
const returnedFn = f();
console.log('----');
returnedFn();
f()()
аналогичен приведенному выше, за исключением того, что он не хранит returnedFn
в переменной - скорее он просто выполняет returnedFn
немедленно.
Это то же самое, что делает noisy
- он возвращает функцию, поэтому, если вы хотите немедленно вызвать возвращенную функцию, нигде не сохраняя возвращаемую функцию, поместите еще один ()
после вызова noisy
.
Проблема с
noisy(Math.min(3, 2, 1))
заключается в том, что он немедленно вызывает Math.min
- интерпретатор упрощает это до
noisy(1)
перед вызовом noisy
, поэтому noisy
не видит ничего о Math.min
или аргументах, с которыми он был вызван. (Но весь смысл функции noisy
состоит в том, чтобы регистрировать как вход, так и выход функции)