几个需要注意的闭包

/* ------------------------------------------------------*/

 function a() { 
     var i = 0; 
    function b() {
      console.log(++i);
   } 
   return b;
}                        
var c = a();        //执行完var c=a()后,变量c指向了函数b,再执行c()后就会弹出一个窗口显示i的值(为1)。
c();                       //输出1

/* -----------------------------------------------------*/
 function a() { 
    var i = 0; 
    return function(){
         console.log(++i);
     }
}
var c = a();
c();                     //输出1(和上面的一样)

/* -----------------------------------------------------*/
(function() { 
var i = 0; 
   return function(){
          console.log(++i);
      }
})()();                    //输出1
/* -----------------------------------------------------*/
var i = 0; 
(function() { 
   return function(){
          console.log(++i);
      }
})()();                    //输出1
/* -----------------------------------------------------*/

 (function(i) { 
   return function(){
          console.log(++i);
      }
})(0)();                  //输出1
/* -----------------------------------------------------*/
for (var i = 0; i < 3; i++) {
    setTimeout((function(i) {             
        return function() {
            console.log(i);
        };
    })(i), 2000);
    console.log(i);
}              //输出 10 11 12 (隔两秒后)0 1 2

/* -----------------------------------------------------*/
for (var i = 0; i < 3; i++) {
    setTimeout((function(i) {
        return function() {
            console.log(i);
        };
    })(i)(), 2000);
    console.log(i);
}            //立即输出 0 10 1 11 2 12 ,(两秒后运行程序结束)

你可能感兴趣的:(js学习)