javascript闭包和局部变量“记住”

时间:2018-10-26 10:38:40

标签: javascript closures

有关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 :(得分:1)

这是因为在第二个示例中,您第二次调用a,而在第一个示例中,a仅被调用一次。每次调用a时,x的值都会初始化为5。返回的内部函数将创建闭包,并且在两次调用之间会记住x的值。该功能。但是,每次您从a返回一个新函数时,该函数最初都可以访问一个{5},其值为5。