Вопрос о закрытии 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
изменяется его значение, а новое значение не сохраняется. Это почему?
Это потому, что во втором примере, вы вызываете a
второй раз, в то время как в первом одном a
только вызывается один раз. Каждый раз, когда вы вызываете a
, значение x
инициализируется как 5. Это возвращаемая внутренняя функция, которая создает замыкание, а значение x
запоминается между вызовами этой функции. Но каждый раз, когда вы возвращаете новую функцию из a
, она сначала имеет доступ к x
который содержит значение 5.
t it the same as calling it through
c` в первый раз и с аргументом во второй раз?e
это не похоже на вызовa()
черезc
, а затем передачу аргумента4
. Почему тогдаx
не инициализируется как5
?