一道笔试题
var arr = ['第一次','第二次','第三次'];
for(var i=0;i<arr.length;i++){
setTimeout(function(){
document.getElementById('info').innerHTML = arr[i];
},i*10000);
}
你认为这会输出什么?警惕别跳入圈套里。
效果为:
- undefined
- 10秒后输出 undefined
- 20秒后输出 undefined
为何呢?由于i是全局变量,当for轮回实行完毕后,i固然即是数组长度,所以三次效果都是第三次。现实测试效果都是undefined,由于只要当i=3的时刻才完毕for轮回,而arr[3]示意数组的第四个元素,现实arr数组里只要三个元素,所以arr[3]也就即是undefined
运用闭包的体式格局处理
var arr = ['第一次','第二次','第三次'];
for(var i=0;i<arr.length;i++){
(function(num){
setTimeout(function(){
document.getElementById('info').innerHTML = arr[num];
},num*10000);
})(i);
}
关于setTimeout实行流的题目,这里有一个栗子:
console.log(1);
setTimeout(function(){console.log(2);},0);
console.log(3);
setTimeout(function(){console.log(4);},0);
console.log(5);
实行效果
13524
以上实行效果,能够剖析到虽然setTimeout得时候设置为0,但setTimeout需要等代码流实行完毕后再来实行setTimeout函数块