今天又收到面试了,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);注意:方法不唯一
然后面试官就告诉我,嗯,查查百度!!
然后就没有然后了!!
看来代码还是需要多写写啊,光知道闭包是函数套函数是不行的!!!
我真是个铁憨憨!! 继续加油吧!