码迷,mamicode.com
首页 > 其他好文 > 详细

经典闭包

时间:2017-10-13 00:45:52      阅读:35      评论:0      收藏:0      [点我收藏+]

标签:ons   函数   运行环境   调用   闭包   log   function   环境   注册   

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));
}

经典闭包

标签:ons   函数   运行环境   调用   闭包   log   function   环境   注册   

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!