繁体   English   中英

为什么多次调用时,闭包函数中的javascript变量不会重置为默认值?

[英]Why do javascript variables in closure functions not reset to a default when called multiple times?

在下面的代码中,有人可以向我解释为什么多次调用counter导致每次调用i的值增加?

我的理解是,我们特别设定i = 0; makeCounter ,每次通过counter变量调用makeCounteri都应该重置为0.我无法理解为什么不是这种情况。

function makeCounter() {
  // `i` is only accessible inside `makeCounter`.
  var i = 0;

  return function() {
    console.log( ++i );
  };
}

// Note that `counter` and `counter2` each have their own scoped `i`.

var counter = makeCounter();
counter(); // logs: 1
counter(); // logs: 2

每次makeCounter都通过“counter”变量调用

那是错的。

你只需要调用makeCounter() 一次 - 在var counter = makeCounter();
counter是对返回函数的引用,它关闭i变量。

调用counter()将执行此返回的函数,就像任何其他函数一样。

如果多次编写makeCounter()()就会发生您期望的行为。

每次调用makeCounter [...] i应该重置为0

那就对了。

makeCounter通过counter变量调用

不,这不对。 使用counter()调用makeCounter返回的匿名函数。 makeCounter只被调用一次,其结果被分配给counter变量。

请注意, countercounter2每个都有自己的作用域i

是的,是的。 但是你的例子不完整:

var counter = makeCounter();
counter(); // logs 1
var counter2 = makeCounter();
counter2(); // logs 1 again!
counter(); // still logs 2
counter2(); // logs 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM