难题

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
 
posted @ 2022-05-27 16:58  锦呀  阅读(30)  评论(0)    收藏  举报