今天遇到一個問題,題目如下:
var len=4; while(len--){ setTimeout(function(){ console.log(len); },0); console.log(len); };
問:輸出是什么?
我的答案是打印3,2,1,0,-1,-1,-1,-1
過程是先執行console.log(len) ,執行了4次之后,再執行4次 setTimeout
問題很簡單,但是我就想把console.log(len) 去掉,如下:
var len=4; while(len--){ setTimeout(function(){ console.log(len); },0); };
這下會打印什么?
應該是-1,-1,-1,-1對吧,但是很遺憾,在chrome的控制台下顯示的是 15,-1,-1,-1,-1為什么多個15,我就很好奇的在執行了一邊這段代碼,結果顯示的是19,-1,-1,-1,-1
再執行就是23,-1,-1,-1,-1
很有有規律,這4個-1前面的數字是什么?我發現它是每次循環的次數,但是剛打開我之前沒有執行啊,第一次打印也不能是15啊
秉着知根知底的信念,就去谷歌了一下,發現這是setTimeout的返回值。為什么會有這么一個返回值呢,大家都知道setTimeout執行會被clearTimeout結束等待,它是靠什么結束的呢?是ID,
大家可能不太相信,可以這樣來嘗試下:
var len=4; while(len--){ var time=setTimeout(function(){ console.log(len); },0); }; console.log(time);
這樣就可以知道time是什么了吧。