закрытие javascript и локальная переменная «запоминание»

1

Вопрос о закрытии JS. У меня есть красные определения и примеры этого, и я считаю, что я правильно понимаю механизм. Итак, вопрос касается конкретной вещи, которую я не понимаю. Пожалуйста, рассмотрите следующие два кода. Код 1:

function a(){
let x = 5;
return function b(y){
    x=x+y;
    return x;
};
}

let c = a();
let d = c(3);
let e = c(4);
console.log(d);  // logs 8
console.log(e);  // logs 12

Код 2:

function a(){
let x = 5;
return function b(y){
    x=x+y;
    return x;
};
}

let d = a()(3);
let e = a()(4);
console.log(d);  //logs 8
console.log(e);  //logs 9

Вопрос: В коде 1 x изменяется его значение, а новое значение сохраняется в закрытии. В коде 2 x изменяется его значение, а новое значение не сохраняется. Это почему?

Теги:
closures

1 ответ

1
Лучший ответ

Это потому, что во втором примере, вы вызываете a второй раз, в то время как в первом одном a только вызывается один раз. Каждый раз, когда вы вызываете a, значение x инициализируется как 5. Это возвращаемая внутренняя функция, которая создает замыкание, а значение x запоминается между вызовами этой функции. Но каждый раз, когда вы возвращаете новую функцию из a, она сначала имеет доступ к x который содержит значение 5.

  • 0
    Разве t it the same as calling it through c` в первый раз и с аргументом во второй раз?
  • 0
    В коде 1 при вызове e это не похоже на вызов a() через c , а затем передачу аргумента 4 . Почему тогда x не инициализируется как 5 ?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню