首页 > 编程语言 > 详细

关于JavaScript闭包的小问题

时间:2016-08-15 20:42:25      阅读:185      评论:0      收藏:0      [点我收藏+]

怎么说,闭包大体也就是作用域的问题。
闭包的一个用途是用于模块化,保护函数体内的私有变量,如:

 1 var foo = function(){
 2     var _num = 1;
 3     var sayHello = function(){
 4         console.log(‘hello‘);
 5     };
 6     var getNum = function(){
 7         return _num;
 8     };
 9     return {
10         getNum : getNum ,
11         sayHello : sayHello
12     }
13 }
14 var num = foo().getNum();
15 console.log(num); //1
16 foo().sayHello(); //hello

模块化的东西不多说,下面说之前一直不解的问题:

1 var $div = $("div");
2 for(var i = 0; i < $div.length;i++){ //length = 4
3     $div[i].onclick = function(){
4         console.log(i); // 4 4 4 4
5     }
6 }

原因在于log的参数i为形参,只有在onclick事件触发时,才将i赋值。

简单修改,通过立即执行函数即可将i进行绑定:
1 var $div = $("div");
2 for(var i = 0; i < $div.length;i++){ //length = 4
3     $div[i].onclick = (function(i){
4         console.log(i); // 1 2 3 4
5     }(i));
6 }

 

 

关于JavaScript闭包的小问题

原文:http://www.cnblogs.com/zhaoww/p/5774060.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!