闭包
1、闭包的概念
当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄漏(占用得越多,剩下的内存越少)。
2、闭包的作用
a:实现公有变量(函数累加器)
1 function test(){ 2 var num = 100; 3 function a(){ 4 num++; 5 console.log(num); 6 } 7 function b(){ 8 num--; 9 console.log(num); 10 } 11 return[a,b] 12 } 13 var myArr = test() 14 myArr[1]();//99 15 myArr[0]();//100
b:可以做缓存(存储结构)
1 function test(){ 2 var food = 'apple'; 3 var obj = { 4 eatFood:function(){ 5 if(food !==''){ 6 console.log('I am eating' + food); 7 food = ''; 8 }else{ 9 console.log('There is nothing!') 10 } 11 }, 12 pushFood:function(myFood){ 13 food = myFood 14 } 15 } 16 return obj; 17 } 18 var person = test(); 19 person.eatFood();//I am eating apple 20 person.eatFood();//There is nothing! 21 person.pushFood('banana'); 22 person.eatFood();//I am eating banana
c:可以实现封装,属性私有化
1 function Fan(name,wife){ 2 var prepareWife = 'xiaowu'; 3 this.name = name; 4 this.wife = wife; 5 this.divorce = function(){ 6 this.wife = prepareWife 7 } 8 this.changePrepareWife = function(target){ 9 prepareWife = target 10 } 11 this.sayPreparewife = function(){ 12 console.log(prepareWife) 13 } 14 } 15 16 var fan = new Fan('deng','xiaoyou')
d:模块化开发,防止污染全局变量
3、立即执行函数(针对初始化功能的函数)
只有表达式才能被执行符号执行
4、未经声明的变量只有放在typeof之后才不会报错
5、只有表达式才能被执行
+function test(){ console.log('a') } (function(){ console.log('a') }()) function test(){ var arr = []; for(var i = 0; i<10; i++){ arr[i]=function(){ console.log(i)//10个10 } } return arr; } var myArr = test(); for(var j=0;j<10;j++){ myArr[j]() } function test(){ var arr = []; for(var i = 0; i<10; i++){ (function(j){ document.write(j+'')//1到9 }(i)) } return arr; } var myArr = test(); for(var j=0;j<10;j++){ myArr[j]() }

成大事不在于力量的大小,而在于能坚持多久。

浙公网安备 33010602011771号