js闭包,解决for循环变量未定义等类似问题
来源:互联网 发布:淘宝装修教程新手入门 编辑:程序博客网 时间:2024/06/06 08:48
循环中的闭包一个常见的错误出现在循环中使用闭包,假设我们需要在每次循环中调用循环序号
for(var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 1000);}
上面的代码不会输出数字 0 到 9,而是会输出数字 10 十次。
当 console.log 被调用的时候,匿名函数保持对外部变量 i 的引用,此时 for循环已经结束, i 的值被修改成了 10.
为了得到想要的结果,需要在每次循环中创建变量 i 的拷贝。
避免引用错误
为了正确的获得循环序号,最好使用 匿名包裹器(译者注:其实就是我们通常说的自执行匿名函数)。
for(var i = 0; i < 10; i++) { (function(e) { setTimeout(function() { console.log(e); }, 1000); })(i);}
外部的匿名函数会立即执行,并把 i 作为它的参数,此时函数内 e 变量就拥有了 i 的一个拷贝。
当传递给 setTimeout 的匿名函数执行时,它就拥有了对 e 的引用,而这个值是不会被循环改变的。
有另一个方法完成同样的工作;那就是从匿名包装器中返回一个函数。这和上面的代码效果一样。
for(var i = 0; i < 10; i++) { setTimeout((function(e) { return function() { console.log(e); } })(i), 1000)}
转载自:http://www.9958.pw/post/js_bibao
0 0
- js闭包,解决for循环变量未定义等类似问题
- 使用 let 解决for 循环闭包 i变量问题
- js 解决js for 循环中的闭包问题
- js变量未定义问题
- 解决javascript for 循环使用闭包的问题
- JS 闭包问题- for循环取 i
- 关于js for循环闭包的问题
- JavaScript的闭包问题(闭包解决引用循环变量的问题)
- js for循环中的闭包
- js for循环中的闭包
- js闭包与for循环
- js延迟打印for循环-闭包
- js闭包和for循环
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- MyBatis 实践 --配置
- HDU 1010 Tempter of the Bone (DFS + 奇偶剪枝)
- MyBatis 实践 -动态SQL/关联查询
- mmap - 用户空间与内核空间
- TCP/IP协议详解:卷一----笔记(3)IP:网际协议
- js闭包,解决for循环变量未定义等类似问题
- UVA 11464(p15)----Even Parity
- 华为oj 单词倒排
- hdu 4515 小Q系列故事——世界上最遥远的距离
- Loadrunner重要概念——检查点
- 大数据应用及未来展望(论文)
- Vision Lab Features Library (VLFeat)库C语言API接口
- android设置组件透明效果
- CCPC 2015 I Mahjong hdu 5548