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;