关于js执行属于单线程案例---demo

在 js 中是单线程的, 所谓的异步是假的.

1
以下代码可以证明:但是如何来模拟多任务的执行呢? 在 js 中引入了事件队列的概念.所谓的事件对象就是事件数组. 这个数组的特点就是每次都调用 shift 方法获得数组中的事件处理函数每次都调用 push 方法将函数存储到数组中. 每次在执行类似于事件, 计时器 ajax 等操作时, 并不是立即调用该函数. 每次都是将对应的函数投递到 "数组" 中. 例如:
1
2
3
4
5
6
7
8
9
10
11
12
while(1) {
console.log(5);
}//加入此条命令后,定时器里面的命令将永远无法执行。
console.log( 'console1' );
setTimeout(function () {
console.log( 1 );
}, 2000 );
console.log( 'console2' );
setTimeout(function () {
console.log( 2 );
}, 1000 );
console.log( 'console3' );

简单分析:

1.  代码从上往下运行, 执行第一个 打印, 打印出 console1
2.  有一个异步代码, 将函数投递到数组中. 
3.  打印, 就打印出 console2
4.  有看到一个计时器, 又将函数存储到数组中
5.  又看到了打印, 所以打印出 console3
6.  代码执行完, 将数组中的函数依次执行. 同时清空数组.

while ( 1 );当加行死循环后,队列中的两个定时器将永远也不会执行的。