`
zzzzzz5530041
  • 浏览: 32954 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

js闭包和循环

阅读更多

 

function box(){
  var arr = [];
  for(var i=0;i<5;i++){
    arr[i]=function(){
      return i;
    }
  }
  return arr;
}

var b = box();
console.log(b.length);


for(var i=0;i<b.length;i++){
  console.log(b[i]())

}

 上面的代码会打印出5个5

因为b[i]()调用的是匿名函数,然而匿名函数并没有自我执行,所以等到调用的时候,box()已经执行完毕。。。。

 

下面改一下:

function box(){
  var arr = [];
  for(var i=0;i<5;i++){
    arr[i]=(
      function(num){
        console.log("ccc="+num)
        return num;
      }
    )(i)
  }
  return arr;
}

var b = box();
console.log(b.length);


for(var i=0;i<b.length;i++){
  console.log(b[i])

}

 执行结果:

num=0
num=1
num=2
num=3
num=4
5
0
1
2
3
4

 修改后让匿名函数自我执行,导致最后b[i]返回的是数组而不再是函数了 

 

 

分享到:
评论

相关推荐

    浅谈JS闭包中的循环绑定处理程序

    前几天工作中写前端js代码时,遇到了遍历元素给它添加单击事件。就是这个问题让我整整调了一个下午。最后还是下班回家,上网查资料才知道怎么解决的。 (PS:之前也在《jQuery基础教程》第四版中看过讲循环绑定处理...

    浅谈JavaScript for循环 闭包_.docx

    浅谈JavaScript for循环 闭包_.docx

    javascript闭包传参和事件的循环绑定示例探讨

    今天看到一个javascript的题目,按常理循环绑定事件,但是得到的结果却不是想要的。 代码如下: &lt;a&gt;text&lt;/a&gt; &lt;a&gt;link&lt;/a&gt; [removed] var as = document.getElementsByTagName(‘a’); for ( var i = as.length; ...

    浅谈js 闭包引起的内存泄露问题

    在js闭包中,可以定义“局部变量”,但是外部去调用的话,尤其是反复调用赋值,会造成内存的大量开销。如何防止这种现象的发生?关于闭包还有没有类似的内存或效率问题需要注意?如何去规避? 内存问题可能是如下...

    js高级函数之闭包

    js高级中的函数之闭包函数全解与应用场景(循环闭包,定时器,面试题)

    js实现为a标签添加事件的方法(使用闭包循环)

    主要介绍了js实现为a标签添加事件的方法,基于闭包循环实现事件添加的功能,涉及javascript闭包与事件操作相关技巧,需要的朋友可以参考下

    js闭包引起的事件注册问题介绍

    背景:闲暇时间看了几篇关于js作用域链与闭包的文章,偶然又看到了之前遇到的一个问题,就是在for循环中为dom节点注册事件驱动,具体见下面代码: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;js...

    浅谈js for循环输出i为同一值的问题

    1、最近开发中遇到一个问题,为什么每次输出都是5... 代码如下: &lt;... &lt;head&gt; ...闭包演示&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;p&gt;1 &lt;p&gt;2 &lt;p&gt;3 &lt;p&gt;4 &lt;p&gt;5 [removed] [removed]=function() { var ps = docum

    javascript中的作用域和闭包详解

    主要向大家介绍了javascript中的作用域和闭包,以及利用js闭包实现循环绑定事件,感兴趣的小伙伴们可以参考一下

    Javascript 闭包引起的IE内存泄露分析

    代码如下: function fors(){ obj_a = obj_b; obj_b.attr = obj_a;...因为闭包的循环引用,是间接的。 代码如下: function iememery(){ var js_obj = document.createElement(“div”); js_obj.oncontextmenu = f

    浅谈JavaScript for循环 闭包

    下面小编就为大家带来一篇浅谈JavaScript for循环 闭包。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JavaScript setTimeout使用闭包功能实现定时打印数值

    主要介绍了JavaScript setTimeout使用闭包功能实现定时打印数值 的相关资料,需要的朋友可以参考下

    javascript循环变量注册dom事件 之强大的闭包

    } 结果出现了问题,所有的dom都被注册了 i=n 的时候的事件,查了一些资料,说是在循环过程过this被改变,注册过的事件也被随之改变,找到了一种解决方法; 代码如下: for (var i=0; i&lt;n; i++) { (function (i){...

    分析js闭包引起的事件注册问题

    背景:闲暇时间看了几篇关于js作用域链与闭包的文章,偶然又看到了之前遇到的一个问题,就是在for循环中为dom节点注册事件驱动,具体见下面代码: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;...

    javascript 常见的闭包问题的解决办法

    –这就是闭包的问题 原来 在js中,函数中在定义函数,就出现闭包了。此时外层函数中变量是可以在里层函数里利用的,即使外层函数结束。但是当外层中出现循环的时候,如果在里层函数中利用这个循环变量的话,会直接...

    Javascript闭包演示代码小结

    闭包演示 p {background:gold;} function init() { var pAry = document.getElementsByTagName(“p”); for( var i=0; i ... 原因是初学者并未理解JavaScript的闭包特性。通过element.onclick=f

    深入理解ES6中let和闭包

    本文介绍了深入理解ES6中let和闭包,分享给大家,具体如下: 在开始本文之前我们先来看一段代码 for(var i=0;i&lt;10;i++){ arr[i]=function(){ return i; } } console.log(arr[3]());//10 显然这段代码输出10,...

Global site tag (gtag.js) - Google Analytics