JavaScript中闭包实现的私有属性的getter()和setter()方法


注意:

以下的输出都在浏览器的控制台中




    
    闭包




//第二部分代码:

//非共享闭包测试
function constfunc(v){
    return function(){            //返回一个匿名数组
        return v;                //返回才外部变量 v,
    };
}

var funcs = [];
for(var i=0; i<10;i++)
    funcs[i] = constfunc(i);    

for(i=0;i)
    console.log(funcs[i]());    //在funcs数组中保存的是匿名函数,可通过保存函数的变量后加"()"来执行匿名函数,
                   //获取匿名函数中的v的值
//输出:0 1 2 3 4 5 6 7 8 9 由于每次i的值被constfunc函数中的v所存储,注意是每次循环都是重新调用,因而能存到不同的内存空间 //共享闭包测试 function constfunc2(){ var funcs = []; for(var i=0; i<10;i++) funcs[i] = function(){ return i;}; return funcs; } var funcs = constfunc2(); console.log(funcs[0]()); console.log(funcs[3]()); console.log(funcs[7]()); console.log(funcs[9]()); //输出: 10 10 10 10
//原因:
//由于这个i在同一次函数调用中,同一个变量中(内存地址不变),
//所以当循环执行完i的值为10,在console.log()中的调用每次得到的都是同一个地址上的值,也就是10;