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

闭包

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
View Code

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
View Code

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]()
        }
View Code

 

 

posted @ 2020-03-06 15:41  雪绒花1124  阅读(164)  评论(0)    收藏  举报