前端基础进阶
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>
前端基础进阶(一):内存空间详细图解
前端基础进阶(二):执行上下文详细图解
前端基础进阶(三):变量对象详解
前端基础进阶(四):详细图解作用域链与闭包
其中一个问题的这里补充一下:
利用闭包,修改下面的代码,让循环输出的结果依次为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>
相关文章推荐
- 前端基础进阶(一):内存空间详细图解
- 前端基础进阶(一):内存空间详细图解
- 前端基础进阶(一):内存空间详细图解
- 前端基础进阶(一):内存空间详细图解
- 前端基础进阶变量对象详解
- 前端进阶试题-JavaScript基础篇
- 前端基础进阶(五):全方位解读this
- 前端基础进阶(二):执行上下文详细图解
- 前端基础进阶(一):内存空间详细图解
- 前端基础进阶(三):变量对象详解
- 前端基础进阶(二):执行上下文详细图解
- 前端基础进阶(八):深入详解函数的柯里化
- 前端基础进阶(六):在chrome开发者工具中观察函数调用栈、作用域链与闭包
- 前端基础进阶系列
- 前端基础进阶(十二):深入核心,详解事件循环机制
- 前端基础进阶:内存空间详细图解
- 前端基础进阶(五):全方位解读this
- 前端基础进阶(十):面向对象实战之封装拖拽对象
- 前端基础进阶(一):内存空间详细图解
- 前端基础进阶(四):详细图解作用域链与闭包