Функции, неявно принимающие аргументы

#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/Closures

2. @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 .

Делает ли это более понятным?