共计 769 个字符,预计需要花费 2 分钟才能阅读完成。
谈谈我对 js 中 timer 的认识
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 是什么了吧。
正文完
发表至: javascript
2019-08-07