#javascript
#javascript
Вопрос:
Мне просто любопытно, почему приведенная ниже функция работает отлично, хотя в ее определении мы не видим никаких определенных аргументов?
Это не кажется интуитивно понятным для начинающего разработчика JS.
const add = () => {
return num => {
const result = num 10;
return `Calculated! ${result}`;
};
};
const addFn = add()
console.log(addFn(5)) // Calculated! 15
Комментарии:
1. это вызывается
closure
, вы можете прочитать об этом здесь: developer.mozilla.org/en-US/docs/Web/JavaScript/Closures2. @zb22: обратите внимание, однако, что в этом случае значения не закрываются. У
add
функции нет параметров и локальных переменных в области видимости, к которым может обращаться возвращаемая функция.
Ответ №1:
Вы отчасти правы. add
не принимает аргументов. Если вы укажете какие-либо, они будут проигнорированы.
Но когда вы вызываете add
, вы возвращаете функцию
num => {
const result = num 10;
return `Calculated! ${result}`;
}
что может быть легче распознать как функцию, если вы заключили ее единственный аргумент в круглые скобки:
(num) => {
const result = num 10;
return `Calculated! ${result}`;
}
Эта новая функция принимает (предположительно) число, добавляет к нему 10 и возвращает форматированную строку, содержащую этот результат.
Итак, это:
const addFn = add()
просто присваивает значение addFn
as этой функции, возвращаемой add ()
, а именно функции, которую мы описали выше.
Когда мы вызываем его с 5
помощью , он возвращает форматированную строку, содержащую результат 10 5
.
Делает ли это более понятным?