昨天去一家公司面試前端,第二輪技術面給我出了一個題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等等求解釋。
前端面試的一個小問題
月關寶盒
2018-08-01 22:38:00