什么是JavaScript?
ECMAScript + 宿主环境API
单线程 + 非阻塞
同一个时间只能做一件事
JavaScript RunTime
Stack(栈)
Heap(堆)
Queue(队列)
举例
function f(b){ var a = 12; return a+b+35; } function g(x){ var m = 4; return f(m*x); } g(21);
console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 1000); console.log('script end');
问题
跑在浏览器中
V8有什么呢?
& 其他的API
Chrome浏览器
console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Promise.resolve().then(function() { console.log('promise1'); }).then(function() { console.log('promise2'); }); console.log('script end');
script start script end promise1 promise2 setTimeout
任务队列分为:
1. macro-task(宏任务)
2. micro-task(微任务)
在最新标准中,它们被分别称为task与jobs。
macro-task大概包括:script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering。
micro-task大概包括: process.nextTick, Promise, Object.observe(已废弃), MutationObserver(html5新特性)
演示
怎样区分这两种任务?
1. 实验
2.看官方文档
谢谢
By baiji
技术分享