转圈圈

闭包 closure

  1. 概念理解

    能够读取其他函数内部变量的函数。解决了外部读取内部局部变量的问题。

  2. 用途

       function f1() {
         var n = 1;
         // add 没有用var申明,此处为创建了一个全局变量,严格模式将报错
         add = function() {
           return n+=1;
         }
         function f2() {
           window.alert(n);
         }
         return f2;
       }
    
       var result1 = f1(); //f2
       result1(); // 1
       add(); //add在全局作用域下, n = 2
       result1() // 2
    
  3. 思考

     var name = 'window';
     var obj = {
       name: 'obj',
       getName: function() {
         return function(){
           return this.name;
         };
       }
     };
     alert(obj.getName()()); // window
     // 等价于
     var result = obj.getName();
     alert(result());
     // obj.getName() 返回一个匿名函数,相当于 var result = obj.getName();存在于全局作用域中,this 指window对象 
    
     var name = 'window';
     var obj = {
       name: 'obj',
       getName: function() {
         var that = this;
         return function() {
           return that.name;
         };
       }
     };
     alert(obj.getName()()); // obj
    
    // 4 4 4 4
    for(var i = 1; i < 5; i+=1){
      console.log(i)
    }
    
    // 1 2 3 4
    for(var i = 1; i < 5; i+=1){
      (function(i){console.log(i)})(i)
    }
    
    

原文:

posted @ 2019-04-03 10:55  rosendolu  阅读(111)  评论(0编辑  收藏  举报