一个很有趣的算法

        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]);
	}

  先看结果

哈哈是不是很有趣。

竟然自动排序了。

其实把原理很简单

首先setTimeout有两种形式

setTimeout(code,interval)
setTimeout(func,interval,args)

所以第二个arr[i]就会作为参数传进去。

明白了吧。

然后就是setTimeout异步运行的机制。其实当第一次cosole.log()时候

外面的for以后走完了,你不信么。

来来上图

我会乱说么。呵呵呵呵

看吧第一次debugger时候就已经是10了

然而时间肯定是从小到大运行的,所以就从小到大输出了。

话说真是好好玩的东西。:)

原文地址:https://www.cnblogs.com/web-alibaba/p/4842968.html