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代码时,遇到了遍历元素给它添加单击事件。就是这个问题让我整整调了一个下午。最后还是下班回家,上网查资料才知道怎么解决的。 (PS:之前也在《jQuery基础教程》第四版中看过讲循环绑定处理...
浅谈JavaScript for循环 闭包_.docx
今天看到一个javascript的题目,按常理循环绑定事件,但是得到的结果却不是想要的。 代码如下: <a>text</a> <a>link</a> [removed] var as = document.getElementsByTagName(‘a’); for ( var i = as.length; ...
在js闭包中,可以定义“局部变量”,但是外部去调用的话,尤其是反复调用赋值,会造成内存的大量开销。如何防止这种现象的发生?关于闭包还有没有类似的内存或效率问题需要注意?如何去规避? 内存问题可能是如下...
js高级中的函数之闭包函数全解与应用场景(循环闭包,定时器,面试题)
主要介绍了js实现为a标签添加事件的方法,基于闭包循环实现事件添加的功能,涉及javascript闭包与事件操作相关技巧,需要的朋友可以参考下
背景:闲暇时间看了几篇关于js作用域链与闭包的文章,偶然又看到了之前遇到的一个问题,就是在for循环中为dom节点注册事件驱动,具体见下面代码: <!DOCTYPE html> <html> <head> <title>js...
1、最近开发中遇到一个问题,为什么每次输出都是5... 代码如下: <... <head> ...闭包演示</title> </head> <body> <p>1 <p>2 <p>3 <p>4 <p>5 [removed] [removed]=function() { var ps = docum
主要向大家介绍了javascript中的作用域和闭包,以及利用js闭包实现循环绑定事件,感兴趣的小伙伴们可以参考一下
代码如下: 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 setTimeout使用闭包功能实现定时打印数值 的相关资料,需要的朋友可以参考下
} 结果出现了问题,所有的dom都被注册了 i=n 的时候的事件,查了一些资料,说是在循环过程过this被改变,注册过的事件也被随之改变,找到了一种解决方法; 代码如下: for (var i=0; i<n; i++) { (function (i){...
背景:闲暇时间看了几篇关于js作用域链与闭包的文章,偶然又看到了之前遇到的一个问题,就是在for循环中为dom节点注册事件驱动,具体见下面代码: <!DOCTYPE html> <html> <head> <title>...
–这就是闭包的问题 原来 在js中,函数中在定义函数,就出现闭包了。此时外层函数中变量是可以在里层函数里利用的,即使外层函数结束。但是当外层中出现循环的时候,如果在里层函数中利用这个循环变量的话,会直接...
闭包演示 p {background:gold;} function init() { var pAry = document.getElementsByTagName(“p”); for( var i=0; i ... 原因是初学者并未理解JavaScript的闭包特性。通过element.onclick=f
本文介绍了深入理解ES6中let和闭包,分享给大家,具体如下: 在开始本文之前我们先来看一段代码 for(var i=0;i<10;i++){ arr[i]=function(){ return i; } } console.log(arr[3]());//10 显然这段代码输出10,...