为什么JavaScript闭包不能正确使用双括号?

为什么JavaScript闭包不能正确使用双括号?,javascript,Javascript,当我使用双括号时,这段代码返回1 功能a{ 设x=0; 返回函数b{ x=x+1; 返回x; } } A. A. console.loga 第一个示例分别运行了三次,因此第二次或第三次的执行不会影响其他调用的返回值 但是,在第二个示例中,您将y分配给从单个调用a返回的函数,该函数设置闭包。现在y保存了对a中使用的x变量的引用。第二次调用y,然后第三次调用y使用了与第一次调用a相同的单作用域,因此在整个代码中使用了相同的x值。最后,由于您调用y三次,相同的一个x将递增3次,结果是3。您的第一个示

当我使用双括号时,这段代码返回1

功能a{ 设x=0; 返回函数b{ x=x+1; 返回x; } } A. A. console.loga 第一个示例分别运行了三次,因此第二次或第三次的执行不会影响其他调用的返回值


但是,在第二个示例中,您将y分配给从单个调用a返回的函数,该函数设置闭包。现在y保存了对a中使用的x变量的引用。第二次调用y,然后第三次调用y使用了与第一次调用a相同的单作用域,因此在整个代码中使用了相同的x值。最后,由于您调用y三次,相同的一个x将递增3次,结果是3。

您的第一个示例与此相同:

//a; x=0;x=x+1; //a; x=0;x=x+1; //console.loga;
x=0;x=x+1;console.logx 在代码中添加一些调试可以帮助理解正在执行的操作。在第一个示例中,您正在调用初始化变量x的方法a,然后调用它返回的函数。此模式执行3次:

功能a { 设x=0; console.login将x初始化为0!; 返回函数b { x=x+1; console.login增加x,现在x是:+x; 返回x; } } A. A.
console.loga;想想x=0的频率;在第一个示例和第二个示例中运行。这是答案的关键。从我看来,它正在做你让它做的事情。在第一个例子中,你打了两次电话给a。在第二个示例中,您只调用一次并重用结果。