Распакуйте код. Если мы начнем с
2
то давайте проигнорируем область и распакуем ее:
addTo
I e var addTo = function ( прошло ) { var add = function ( внутреннее ) { return прошло + inner ; }; return add ; } var x = addTo ( 2 ); консоль . log ( x ( 4 )); после этого был запущен:
var addTo = function (passed) {
var add = function(inner){
return passed + inner;
};
return add;
}
var x = addTo(2);
console.log(x(4));
Я не понимаю, почему этот код работает только, когда мы используем var x в функции actualAdd ( передано , внутренне ) { return прошло + inner ; }; function addTo ( прошло ) { return function ( x ) { return actualAdd ( прошло , x ); } var addSomethingTo2 = addTo ( 2 ); // Это дескриптор функции actualAdd (), // в котором «пройденный» всегда является значением 2. console . log ( addSomethingTo2 ); var thisIsSix = addSomethingTo2 ( 4 ); // Вызывая addSomethingTo2 (4), мы запускаем вычисление // 2 + 4 и возвращаем результат этого: 6 console . log ( thisIsSix ); и не используйте console.log (addTo (add)); Спасибо за ваши ответы!
Ваш console.log(x(4))To
x = addTo (2) возвращает другую функцию, функцию console.log(addTo(2)(4))
.
Когда вы это сделаете addTo
, значение x
теперь является функцией 2
, которая имеет доступ к значению, которое 2
вы добавляете add
.
Когда вы сделаете это 2
после того, как вы это сделали addTo
, это будет равнозначно add
:
4
с 2
аргументомpassed
возвращает, inner
который имеет доступ к пройденному 2
из-за закрытияconsole.log(addTo(4))
(функцией add
), с аргументом4
passed
иaddTo
Подводя итог, это не сработает, console.log
потому что возвращаемое значение Function
является другой функцией, поэтому console.log
просто напечатает что-то вродеFunction