We have code like:

var numbers = [1,2,3];

for(var i in numbers){
setTimeout(function(){console.log(numbers[i]);
}, 0);
} //
//
//

Note:

1. function block doesn't create scope!

2. setTimeout function run after all the other code finished.

Therefore, before setTimeout get run, for block already exec 3 times and i was set to 2.

Once setTimeout get running, it prints out numbers[i] which is 3.

Now, we change the code to:

var numbers = [1,2,3];

for(var i  in  numbers){
(function(){
var j = i;
setTimeout(function(){
console.log(numbers[j]);
})
})();
} //
//
//

Note:

1. function does create new scope.

2. the (function(){})() run immedatly.

3. (function(){}) inside for block actually is closure which does remeber the local var value (in our case is var j).

最新文章

  1. python基础补漏-06-内置模块
  2. CSS will-change 属性
  3. 世界那么Big,组件那么Small
  4. 2016.11.17 NOI plus day0
  5. Swift开发小技巧--TabBar中间按钮的添加方案
  6. Spring 定时任务的配置
  7. 查看用户的SQL执行历史
  8. 《OD大数据实战》MongoDB环境搭建
  9. python 中 time 模块 格式化 format
  10. 对Spring的一些理解
  11. CentOS6.5安装LAMP环境APACHE的安装
  12. CEF3 怎样禁止右键菜单
  13. Unity 3D 如何修改新建脚本中的 C# 默认创建的 Script 脚本格式
  14. hdu5443 ST表裸题:求区间最大
  15. idea language level 介绍
  16. MSSqlServer 主从同步复制原理(发布/订阅)
  17. TinyMCE Editor
  18. unity3D iTween的使用
  19. 第三百一十九节,Django框架,文件上传
  20. POJ3259 Wormholes 【Bellmanford推断是否存在负回路】

热门文章

  1. IOS 五星评分控件
  2. HDU 5122 K.Bro Sorting
  3. java 中常见异常
  4. redis发布/订阅模式
  5. Android功能模块化之生成验证码Bitmap
  6. hashtable,hashMap,vector和ArrayList
  7. USACO 2013 November Contest Gold 简要题解
  8. HDU-4751 Divide Groups 染色问题
  9. Linux内存中的Cache真的能被回收么?
  10. Java设计模式---工厂方法模式(Factory-Method)