js通过为function设置自定义属性的方法解决闭包陷阱
2015-11-18 00:00
856 查看
摘要: js通过为function设置自定义属性的方法解决闭包陷阱,用到了arguments.callee
一个经典的闭包问题:
结果会是a0 a1 a2三个元素点击后alert的值均为3,因为闭包使它们使用了同一个i的值。
经典的解决方法是:
性能更好的解决方法:
很巧妙地通过为function设置自定义属性的方法,不用闭包,就完美解决了问题。
一个经典的闭包问题:
<div id="a0">a0</div> <div id="a1">a1</div> <div id="a2">a2</div>
function test() { for (var i = 0; i < 3; i++) { document.getElementById('a'+i).onclick= function() { alert(i); } } } test();
结果会是a0 a1 a2三个元素点击后alert的值均为3,因为闭包使它们使用了同一个i的值。
经典的解决方法是:
function test(){ for(var i=0;i<3;i++){ (function(){ var j=i; document.getElementById('a'+i).onclick = function() { alert(j); } })() } } test();
性能更好的解决方法:
function test(){ for(var i=0;i<3;i++){ (document.getElementById('a'+i).onclick = function() { alert(arguments.callee.j); }).j=i; } }
很巧妙地通过为function设置自定义属性的方法,不用闭包,就完美解决了问题。
相关文章推荐
- js类数组对象使用数组方法的安全方式
- js caller的妙用以及new关键字与prototype的联系
- Json-lib-----1、简介
- js数组分页
- js日期格式化的方法
- 五个你必须知道的javascript和web 调试技术
- Jsp九大内置对象
- js-案例:省市连动下拉框
- 细说javascript的对象
- 恶补JavaScript第一篇
- 第22篇 js中的this指针的用法
- 用ajax获取json数据并在网页上面显示小例子
- js实现接口
- url解析函数
- JSP中退出登录销毁Session
- JS实现的MAP
- Gson-----3、使用GSON创建JSON数据
- Gson-----2、使用GSON读取JSON数据
- Gson-----1、JSON简介
- HTML中<Javascript>与activity之间的交互