level 8
代码代码☜
楼主
闭包:当内部函数被保存外部时,将会生成闭包。闭包会导致原有作用链不释放,造成内存泄漏。闭包发生条件:函数嵌套 闭包的作用实现公有变量Eg:函数累加器例4可以做缓存(存储结构)Eg:eater例2可以实现封装,属性私有化Eg:person()模块化开发,防止污染全局变量例题:例1、function test(){var num = 100;function a () {num ++;document.write(num);//101}function b () {num --;document.write(num);//100}return [a,b];}var myArr = test();myArr[0]();// a doing a.[[scope]] 0 : aAO// 1 : testAO *// 2 : GOmyArr[1]();// b doing b.[[scope]] 0 : bAO// 1 : testAO *// 2 : GO例2、function eater( ) {var food = "";var obj = {eat:function(){document.write("I am eating "+food);food="";},push: function(myFood){food=myFood;}}return obj;}var eater1 = eater();eater1.push("banana");eater1.eat();例3、function test(){var arr=[];for(var i =0;i<10;i++){arr[i]=function(){document.write(i+" ");}}return arr;}var myArr=test();for(var j=0;j<10;j++){myArr[j]();}输出结果:10 10 10 10 10 10 10 10 10 10例4、function test(){var arr=[];for(var i =0;i<10;i++){(function(j){arr[j]=function(){document.write(j+" ");}}(i));}return arr;}var myArr=test();for(var j=0;j<10;j++){myArr[j]();}输出结果:0 1 2 3 4 5 6 7 8 9例5、var x=1;if(function f(){}){x +=typeof f;}document.write(x);输出结果:“1undefined”
2018年06月27日 07点06分
1
