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

转载于:https://www.cnblogs.com/wolm/p/3489066.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值