setTimeout()的返回值


今天遇到一個問題,題目如下:

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是什么了吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM