function test() {
var n=1;
var add = function () {
n++;
console.log(n);
};
return{n:n,add:add};
}
var t1=test();
var t2=test();
t1.add();//输出2
t1.add();//输出3
var b = t1.n;
这里的b为什么还是1?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
应该这样写:
你之前的写法应该是类似这样的:
执行到
var t1 = test()后,变量 t1 的结构:即使后面再怎么执行
t1.add(), 都没有操作已经赋值的变量 t1,这里注意仅仅是闭包中的 n 变了,t1.n 已经在执行上面代码段的时候赋值了,后续又没有操作 t1,t1.n 当然不会变咯这里闭包返回的t1实际上是这样的 {n:1,add:add}, 返回的并不是test内n的引用, 所以t1.n等于1
试试这段代码