有关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
会更改其值,并且不会保存新值。为什么会这样?
答案 0 :(得分:1)
这是因为在第二个示例中,您第二次调用a
,而在第一个示例中,a
仅被调用一次。每次调用a
时,x
的值都会初始化为5。返回的内部函数将创建闭包,并且在两次调用之间会记住x
的值。该功能。但是,每次您从a
返回一个新函数时,该函数最初都可以访问一个{5},其值为5。