yoowinsu / blog

issues blog
17 stars 3 forks source link

神奇的alert #63

Open yoowinsu opened 7 years ago

yoowinsu commented 7 years ago

alert是弹框显示一个警告对话框,属于window的一个方法。

偶然看到一段代码,如下:

for(let i=0;i<10;i++){
  setTimeout(function(){
    alert(i)
  },0)
}

看到代码的第一反应是,这不是面试题中经常考察的let的块级作用域以及setTimeout的代码执行后加入队列嘛,很明显是顺序弹窗0,1,2,3,4,5,6,7,8,9.

此时,你的答案又是什么呢?

如果和我想的一样,还说明是图样图森破啊!真是这样,也太对不住我这标题了,哈哈

很神奇的alert,第一次弹窗出0是无需置疑的,重点是后面alert出的1-9是无序执行的,有图有真相:

这是alert和console.log不同的地方。作为对比,我们看下同样的代码把alert换成console.log的结果:

具体原因目前还不得而知,就暂且当做alert的一个特性吧,一个神奇的特性。

heiyantutu commented 4 years ago

2020年回过来说下 已经是正常顺序了