закрытие javascript и локальная переменная «запоминание» - PullRequest
0 голосов
/ 26 октября 2018

Вопрос о закрытии 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 изменяется его значение и новое значение не сохраняется.Почему это так?

1 Ответ

0 голосов
/ 26 октября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...