Распакуйте код. Если мы начнем с
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))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), с аргументом4passedиaddToПодводя итог, это не сработает, console.logпотому что возвращаемое значение Functionявляется другой функцией, поэтому console.logпросто напечатает что-то вродеFunction