昨天去一家公司面试前端,第二轮技术面给我出了一个题
var len=4;while(len--){
    setTimeout(function(){
        alert(len);
    },0);
    alert(len);
}问输出结果当时有点蒙,自己不熟悉setTimeOut函数以为time为0就是立即调用,然后考官说setTimeOut是异步的,即使是0也会在最后执行,结果输出应该为3,2,1,0,-1,-1,-1,-1.后来又变了题目是:
var len=4;while(len--){
    (function(i){
        setTimeout(function(){
            alert(i);
        },0);
    })(len);
    alert(len);
}这次我就很清楚了,产生一个闭包,每次len的变化i都保存了一个copy,所以输出是3,2,1,0,3,2,1,0.但是刚才写demo的时候发现第一段代码的输出符合预期,第二段的输出开始4个是3,2,1,0但是后面的也就是setTimeout中的输出有时候都不一样,有时是0,2,1,3有时是2,1,0,3等等求解释。
 月关宝盒
月关宝盒 
					精慕HU
 
					qq_花开花谢_0
 随时随地看视频慕课网APP
随时随地看视频慕课网APP