evantianx / Bloooooooog

Place to record what I thought and learned
0 stars 0 forks source link

《JavaScript异步编程》读书笔记 #6

Open evantianx opened 7 years ago

evantianx commented 7 years ago

第一章 深入理解JavaScript事件

事件的调度

理解setTimeout 先来看一段代码:

for(var i = 1; i < 3; i++){
  setTimeout(function(){
    console.log(i);
  },0)
}

输出为:4,4,4 为何如此? JS事件处理器在线程空闲之前不会运行 异步函数的类型 分为两大类: I/O函数和计时函数 I/O函数主要表现在Node.js中,对于I/O操作,异步非阻塞;

在webkit中的console.log是异步的,而在Node中却是同步的

var obj = {}
console.log(obj.foo) //webkit会输出`{foo: 'bar'}`,而Node输出`{}`
obj.foo = 'bar'

计时函数: setTimeOut()setInterval 若将setInternal()的延迟设定为0毫秒,调用频率在i7处理器下各浏览器平均值为200次/秒;在Node环境下为1000次/秒(重复setTimeOut()也会得到相应结果);而若使用while()来调用相同事件会达到百万次每秒的频率。 事实上,HTML规范推行的延迟最小值为4ms 如果需要细粒度的计时,在Node中可以使用process.nextTick;在浏览器端(IE9+)上使用requestAnimationFrame函数 异步函数的编写