Вызов функции, закрытие

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)); Спасибо за ваши ответы!

javascript,

0

Ответов: x = addTo(2)


0

Распакуйте код. Если мы начнем с

2

то давайте проигнорируем область и распакуем ее:

addTo

0

Ваш console.log(x(4))Tox = 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

JavaScript,