首页 > 其他 > 详细

经典闭包

时间:2017-10-12 23:59:59      阅读:319      评论:0      收藏:0      [点我收藏+]
for (var i = 0; i < 5; ++i) {
  setTimeout(function () {
    console.log(i + ‘ ‘);
  }, 100);
}

不能输出正确结果,因为循环中setTimeout接受的参数函数通过闭包访问变量i。javascript运行环境为单线程,setTimeout注册的函数需要等待线程空闲才能执行,此时for循环已经结束,i值为5.五个定时输出都是5 修改方法:将setTimeout放在函数立即调用表达式中,将i值作为参数传递给包裹函数,创建新闭包

for (var i = 0; i < 5; ++i) {
  (function (i) {
    setTimeout(function () {
      console.log(i + ‘ ‘);
    }, 100);
  }(i));
}

经典闭包

原文:http://www.cnblogs.com/linziwei/p/7658592.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!