[英]Why do javascript variables in closure functions not reset to a default when called multiple times?
在下面的代码中,有人可以向我解释为什么多次调用counter
导致每次调用i
的值增加?
我的理解是,我们特别设定i = 0;
在makeCounter
,每次通过counter
变量调用makeCounter
, i
都应该重置为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
变量。
请注意,
counter
和counter2
每个都有自己的作用域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.