难题
function
test() {
var
n = 4399;
function
add(){
n++;
console.log(n);
}
return
{n:n,add:add}
}
var
result = test();
var
result2 = test();
result.add();
result.add();
console.log(result.n);
result2.add();
输出4400 4401 4399 4400
- test构成了一个闭包,result跟result2各自有自己的test作用域,所以最后result2.add()结果是4400
- 前两个没啥好说的,懵逼点在第三个,这里{n:n}是对变量n里的值进行缓存,而不是本身n这个指针变量,这样生成add的时候n指向的值是多少{n:n}里的值就是多少
但是题目进行一个改变,使指向引用。
function test() {
var a = {n:4399};
function add(){
a.n++;
console.log(a.n);
}
return {a:a,add:add}
}
var result = test();
var result2 = test();
result.add();
result.add();
console.log(result.a.n);
result2.add();
输出
4400 4401 4401 4400