欢迎您访问我爱IT技术网,今天小编为你分享的javascript教程:【采用自执行的匿名函数解决for循环使用闭包的问题】,下面是详细的讲解!
采用自执行的匿名函数解决for循环使用闭包的问题
这段代码输出的是10个10而不是期望的0到9,因为闭包内是对i的引用,然后函数执行时i已经变成了10
function f1(){
for(var i=0; i < 10; i++) {
setTimeout(function() {
alert(i);
}, 1000);
}
}
f1();
解决以上的问题可以采用自执行的匿名函数
function f2(){
for(var i=0; i < 10; i++) {
(function(e) {
setTimeout(function() {
alert(e);
}, 1000);
})(i);
}
}
f2();
这里的匿名函数将i作为参数,这里的e会有i的一个拷贝,而引用时是对e的引用,这就避免了上述的问题
关于采用自执行的匿名函数解决for循环使用闭包的问题的用户互动如下:
相关问题:javascript 为什么要使用匿名函数 或者说 匿名闭包
答:1、相当划出一块私有作用域,避免数据污染。 2、执行完就销毁,避免内存长驻。 var Calculator = function (eq) { var eqCtl = document.getElementById(eq); return { add: function (x, y) { } }; }; 这个函数 跟 (function () { }());的区别在... >>详细
相关问题:javascript闭包和匿名函数同时使用的问题
答:只要函数中存在函数就会形成闭包,这与是否具有全局作用域没有关系。比如你的例子,的确是一个闭包,但是匿名函数没有访问上层作用域中的任何东西,但是的确可以访问到,这就是闭。一个很简单的例子 function box(){ for(var i=0,n=dom.length;i >>详细
相关问题:js循环闭包问题
答:window.onload = function() { for (var index = 0; index < 8; index++) { var span = document.createElement('span'); span.innerHTML = "span" + index; document.body.appendChild(span); var temp = function(index) { span.onclick = fun... >>详细
- 【Array】js中更短的 Array 类型转换-类型转换
- 【ExtJs】ExtJs 表单提交登陆实现代码-表单提交-
- 【addClass】javascript自定义的addClass()方法
- 【Ajax】jQuery 学习第六课 实现一个Ajax的TreeVi
- 【extjs】extjs每个组件要设置唯一的ID否则会出错
- 【focus】JavaScript使用focus()设置焦点失败的解
- 【bootstrap3】基于bootstrap3和jquery的分页插件
- 【fn】开发插件的两个方法jquery.fn.extend与jque
- 【datagrid】jQuery easyui datagrid动态查询数据
- 【ajax】js获取通过ajax返回的map型的JSONArray的
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
