一个很有趣的算法
var arr = [ 3000,0,1000,'aa', 2000, 4000, 8000, 6000, 7000, 5000];for (i = 0; i < arr.length; i++) {setTimeout(function(num) {console.log(num);debugger;}, arr[i], arr[i]);}
先看結(jié)果
?
哈哈是不是很有趣。
竟然自動(dòng)排序了。
其實(shí)把原理很簡(jiǎn)單
首先setTimeout有兩種形式
setTimeout(code,interval) setTimeout(func,interval,args)所以第二個(gè)arr[i]就會(huì)作為參數(shù)傳進(jìn)去。
明白了吧。
然后就是setTimeout異步運(yùn)行的機(jī)制。其實(shí)當(dāng)?shù)谝淮蝐osole.log()時(shí)候
外面的for以后走完了,你不信么。
來(lái)來(lái)上圖
我會(huì)亂說(shuō)么。呵呵呵呵
看吧第一次debugger時(shí)候就已經(jīng)是10了
然而時(shí)間肯定是從小到大運(yùn)行的,所以就從小到大輸出了。
話說(shuō)真是好好玩的東西。:)
轉(zhuǎn)載于:https://www.cnblogs.com/web-alibaba/p/4842968.html
總結(jié)
- 上一篇: 怎么辨别iPhone6真假?iPhone
- 下一篇: [Unity3D]Unity3D游戏开发