您的位置:首页 > Web前端

前端基础进阶

2017-02-14 18:57 204 查看
阅读了博客的一个内容,感觉挺不错的。链接如下:

前端基础进阶(一):内存空间详细图解
前端基础进阶(二):执行上下文详细图解
前端基础进阶(三):变量对象详解
前端基础进阶(四):详细图解作用域链与闭包

其中一个问题的这里补充一下:

利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5

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

for (var i = 1; i <= 5; i++) {
(function(i) {
setTimeout(function timer() {
alert(i);
}, i * 1000);
}(i));
}
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: