Nogard_ Ответов: 1

Проблема алгоритмов Javascript


Почему этот код выводит 8? Я не могу полностью понять это. Может ли кто-нибудь описать мне, что происходит в коде?

Код:

функция внешняя(a) {

функция внутренняя(b) {
возврат a + b;
}
возвращение внутренней;
}

var f = внешний(3);
f(5);

//выход: 8

Что я уже пробовал:

Я пытался угадать это, но на самом деле я не могу понять, почему это ouput 8. В первом задается параметр 3 для внешнего (a = 3). Итак
функция внутренняя(b) {
возврат 3 + b;
},
но после этого мы устанавливаем параметр один для функций внешний до 5, так что функция внутренняя(b) {
возврат 5 + b;
} ?
Нет, я действительно не могу понять, что происходит в коде.

Кстати, я действительно молодой студент.

ZurdoDev

Шаг 0: научитесь отлаживать. На все ваши вопросы будут даны ответы. См. Решение 1.

Richard Deeming

Это обычно называют "частичным применением":
Бен Альман » частичное применение в JavaScript[^]

В общем случае метод захвата состояния из внешней функции известен как "замыкание":
Закрытие - JavaScript | MDN[^]

1 Ответов

Рейтинг:
9

Keviniano Gayo

Язык JavaScript... чтение этого кода заставило меня задуматься о том, как он работает..
Я добавил консоль.войдите в журнал и посмотрите, как протекает управление:

function outer(a) {
console.log('outer: ' + a)
function inner(b) {
  console.log('inner:' + b);
  console.log('inner:' + a);
return a + b;
}
  console.log(inner);
return inner;
  
}


var f = внешний(3);

Выход:
"outer: 3"
-----------------------------------------------------
function inner(b) {
window.runnerWindow.proxyConsole.log('inner:' + b);
window.runnerWindow.proxyConsole.log('inner:' + a);
return a + b;
}
-----------------------------------------------------



f(5);

"inner:5"
-----------------------------------------------------
"inner:3"
-----------------------------------------------------
8
-----------------------------------------------------


Первый звонок
var f = outer(3);
устанавливает переменную "a" в 3, затем внешняя функция возвращает определение функции "inner".
Затем 2-й звонок
f(5)
он вызывает "внутреннюю" функцию и присваивает переменной b = 5. В закрытии Javascript переменная "a" сохраняет свое значение "3". Итак, 5 + 3 = 8.