新手个人理解 如有误解 敬请各位前辈评论指出 谢谢
例1: for循环setTimeout定时器:
for(var i = 1 ; i <= 5; i++){
(function(){
setTimeout(function timer(){
console.log(i);
},1000*i);
})();
}
上述代码预期分别输出 1 2 3 4 5 但是实际输出 6 6 6 6 6
原因:由于for循环与setTimeout函数是同步执行函数,而console.out是异步执行函数。异步执行函数需等待同步执行函数执行完毕才开始执行。所以当for循环与定时器全部加载执行完毕放进执行栈之后(即i=6时)console.log开始初始化。所以就出现了五次定时器循环的输出6.
例2: 函数实参传递:
for(var i = 1 ; i <= 5; i++){
(function(j){
setTimeout(function timer(){
console.log(j);
},1000*j);
})(i);
}
而这种写法就可以正确的输出预期结果。因为函数内不是直接传递for循环的值,