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.看官方文档

谢谢

Made with Slides.com