javascript - js循环中的闭包
本文介绍了javascript - js循环中的闭包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
for(var i=0; i< 3;i++){
setTimeout(function() {
console.log(i);
}, 0);
}
输出结果是3,3,3 能否详细解释一下执行过程?
解决方案
JS var
不是块作用域,所以,只有一个变量叫做i
。setTimeout
的回调函数是在for
执行完之后执行的,即i
的值不会再改变。于是,一个变量,不可能同时等于多个不同的值。或者说下面的代码和上面的是一样的:
var i;
for(i=0; i< 3;i++){
setTimeout(function() {
console.log(i);
}, 0);
}
JS 是单线程,意思是,一段代码在执行的时候不可能会被打断,不会突然跳转到其他地方的代码去运行。只有一段代码执行完毕,其他地方的代码才有可能执行。所以说for
循环不会无缘无故的被打断,去其他地方执行代码。
console.log(i)
只是函数声明的一部分,不属于for
要执行的语句。setTimeout(function(){console.log(i)},0)
,这句的意思是,定义一个函数其代码是 console.log(i)
,设置一个定时器,0ms后执行这个函数。所以说在for
循环里并不会执行console.log(i)
这一句,因为它只是函数定义语句的一部分。
这篇关于javascript - js循环中的闭包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文