Вы должны понимать, что такое "функции первого класса". Практически это говорит о том, что функции - это такие же значения, как и все.
Существует огромная разница между var a = f()
и var a = f
. Первый вызывает или , запускает , f
и сохраняет результат в a
. Последний сохраняет f
сам в a
. Это означает, что a
является функцией, и вы можете сделать a()
- что равно f()
.
Если вы хотите создать функцию, которая принимает в качестве аргумента другую функцию (новая функция называется функция высшего порядка , а существующая является callback ), вы делаете это следующим образом:
function add(a, b) {
return a + b;
}
function calculator(a, b, callback) {
return callback(a, b); // Invoke the function stored in `callback` with parameters `a` and `b` and return the result
}
Теперь я оставляю третью часть для вас как упражнение ...
Редактировать:
Начиная с ES6, вы можете определить параметр по умолчанию в форме function(param = default)
, однако, чтобы использовать add
в качестве значения по умолчанию, вы должны сделать Обязательно, вы объявляете это до calculate
, поэтому, когда механизм js видит объявление calculate
, он уже знает, что такое add
.