很久以前在网易面试遇到过这样一道题,具体是什么忘了,意思就是要用setTimeout延迟打印一个for,当时不懂原理,但是面试的大叔人特别好,给我讲了好多题,面试肯定是失败的,但是学到了很多东西,以后的面试经常用到大叔给讲的东西。喏,其中之一就是这个:
for(var i=0 ; i<10; i++) {
(function(i){
//var backup = i;//定义个backup也可以暂存i值
setTimeout(function() {
console.log(i);//输出0-9
}, 1000);
})(i);
}
把变量i包养起来,用的时候再拿,就ok!
反例就是,输出了10个10
for(var i=0 ; i<10; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}