JavaScript运行机制
什么是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
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');
任务队列分为:
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.看官方文档
谢谢
浅谈JavaScript运行机制
By baiji
浅谈JavaScript运行机制
技术分享
- 1,428