javascript中的setTimeout方法在不同时间间隔会产生不同的结果?

for(let i=0;i<3;++i){
            setTimeout(function(){
                alert(i);
            },1000);
        }//这个会输出0,2,1

for(let i=0;i<3;++i){
            setTimeout(function(){
                alert(i);
            },100);
        }//这个会输出0,1,2

 for(let i=0;i<3;i++){
            setTimeout(function(){
                alert(i);
            },1000);
        }//这个会输出0,1,2

不是很懂①那里为什么会输出0,2,1。2怎么跑去1前面了?

感谢大佬们在百忙中解答我的疑问!!

这很正常,因为你同时创建了3个timerout,所以到达时刻几乎相同,而定时精确性不高,就可能出现创建次序和触发次序不同的情况。
加上alert,相当于有了延迟,就能区分出次序了。