看犀牛书关于闭包的相关章节,看到一个关于闭包的问题,对结果不是十分理解
function counter() {
var n =0;
return {
count:function() {return n++;},
reset:function() {n=0;}
};
}
var c = counter(), d = counter();
c.count() //0
d.count() //0
c.reset()
c.count()
d.count()
对 第二个0不是太理解,为什么同一对象下的方法可以共享一个状态n,另一个对象共享的是另一个状态n,感觉不管哪个对象下方法定义的函数的内部[[scope]]都是一样的,为什么不是一起共享状态n呢?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
c对象的n和d对象的n其实是不同的。
将counter方法运行了两遍,其中的作用域是不同的。
如果想让c,d共享一个变量,counter方法可以这么写:
因为你实例化了2个不同的对象