今天又收到面试了,i开心呢,然后又凉凉了,原来以为自己真的了解了闭包,今天我发现我错了。
还好面试官人很好
啥也b说了,上题:
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i);
},1000)
}
console.log(i);
结果:六个五(我知道这是闭包,我还在0,1,2,3,4,5和六个五之间徘徊,真相抽死我)
紧接着面试官又问我,执行顺序怎样
呃呃呃,我想了一会儿
然后弱弱的说到
先执行函数外的i,然后执行计数器内部的i
然后面试官热心的告诉我:计数器是开启了另外的线程,所以执行完当前线程(也就是函数外的i),然后间隔1秒后(设置时间为1秒)在执行剩下的五个计数器
也就是函数的作用是开启了五个计数器,然后执行函数外的i,然后1秒后,计数器时间到,也开始执行!!!
结果也是这样子的
紧接着面试官又问我,如何让计数器内部的五个五变成0,1,2,3,4
,哇,我心想(这不闭包吗),我知道我知道
结果一写,死活写不出来!!!
解决方法:
for(var i=0;i<5;i++){
setTimeout(
(function(i){
return function(){
console.log(i)
}
})(i),1000)
}
console.log(i);
注意:方法不唯一
然后面试官就告诉我,嗯,查查百度!!
然后就没有然后了!!
看来代码还是需要多写写啊,光知道闭包是函数套函数是不行的!!!
我真是个铁憨憨!!
继续加油吧!