今天遇到一个问题,题目如下:
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是什么了吧。