Ответ 1
Чтобы понять это, вы должны знать, в чем разница между вызовом функции и ссылкой на функцию. Как и как области работают в javascript.
Предполагая, что вы знаете это, позвольте объяснить.
Итак, у вас сначала есть переменная hidden
, которой присваивается значение mystery(3)
. Поэтому сразу посмотрите на функцию mystery
и посмотрите, что она возвращает. он возвращает ссылку во внутреннюю функцию mystery2
. Итак, теперь hidden
содержит ссылку, что означает, что у нее нет фактического числового значения. После вас есть второе объявление переменной
var jumble = mystery3(hidden);
. Теперь, чтобы узнать, что у вас есть jumble
, вам нужно посмотреть на функцию mystery3
и значение, которое оно возвращает. Он снова возвращает ссылку на внутреннюю функцию mystery4
. Итак, теперь две переменные, которые у вас есть, содержат ссылки на внутренние функции замыканий mystery
и mystery3
.
Теперь давайте посмотрим на var result = jumble(2)
. Выполнение jumble(2)
является фактическим вызовом функции для функции, в которой jumble
содержит ссылку, которая равна mystery4
. Когда mystery4
запускается, вы видите, что для него требуется параметр bonus
, который будет 2
указан в строке var result = jumble(2)
. Он возвращает param(6) + bonus
. bonus
2
, ok, но что такое param(6)
? Это значение, указанное в jumble
: hidden
, которое было ссылкой на mystery2
, помните? Таким образом, запуск param(6)
выполнит mystery2
с параметром 6
Итак, отслеживание функций может оказаться немного запутанным, но пусть это последует с фактическими значениями, чтобы сделать его немного понятным (если это даже слово).
Выполнение var result = jumble(2)
даст нам возвращаемое значение param(6) + 2
, чтобы получить param(6)
, идем в mystery2
с multiplier = 6
, где мы устанавливаем multiplier = 6 * input
. Наш вход равен 3+2=5
, поэтому multiplier
становится 6*5=30
, а в качестве возвращаемого значения мы умножаем это на 4
, что является нашим var secret
. К концу выполнения mystery2
мы имеем значение 120
, которое возвращается в наш param(6)
в mystery4
. И если вы помните, что наш bonus
был 2
, 120+2=122
Voila!
У меня такое чувство, что я не очень хорошо объяснял это, но это, вероятно, лучшее, что я мог сделать. Надеюсь, что это помогло!