设计概念: 如何理解JS的单线程;什么是任务队列;什么是Event Loop。
案例一
1 | console.log(1) |
结论:setTimeout是异步任务,console.log是同步任务。单线程在一同一时间只能做一件事,JS,任务队列是有执行顺序的,是从上往下依次执行,所以先输出1,setTimeout是异步任务要挂起,往下输出3,执行完同步再执行异步(队列),输出2。
案例二
1 | console.log('A') |
案例三
1 | for(var i=0; i<4; i++) { |
结论:setTimeout
是异步执行的,1000ms
后向任务队列里添加一个任务,只有主线上的全部执行完才会执行任务队列里的任务,所以当主线程for
循环执行完之后 i
的值为5
,这个时候再去任务队列中执行任务,i
全部为5
;每次for
循环的时候setTimeout
都会执行,但是里面的function
则不会执行被放入任务队列,因此放了5次;for
循环的,1000ms
后全部执行任务队列中的函数,所以就是输出五个5
。
修改:
1 | for (var i = 0; i < 4; i++) { |
异步任务
- setTimout和setInterval
- DOM事件
- ES6中的Promise
欣赏此文,打赏一下