Skip to content

Latest commit

 

History

History
48 lines (33 loc) · 1.37 KB

其他.md

File metadata and controls

48 lines (33 loc) · 1.37 KB

同步和异步

同步和异步的概念发生在两个程序的交互上。

当程序A向程序B发出请求后:

  • 如果程序A在程序B返回结果后才执行下一条语句,那么这种方式是同步。
  • 如果程序A不等待程序B返回而直接执行下一条语句,那么这种方式是异步。

异步并不是不处理程序B的返回结果,而是选择预先部署一个函数,等到程序B返回后且程序A空闲时触发该函数。

在浏览器中使用异步的例子:

setTimeout(function () {
    console.log('async');
}, 100);

console.log('sth...');

这种由异步触发的函数被称为异步回调函数,简称异步回调。 另一个常用的异步操作就是ajax,具体此处不再详述。

任务队列

JS是如何实现异步的? JS内部有一个顺序容器,每当有一个异步回调可以被触发,将加入到容器里的尾部。当JS执行完所有代码,就会从那个容器的头部取出一个函数来执行。因为这种特性,我们把该容器称为任务队列。

用代码模拟任务队列:

var main = function (code) {
    var task = [];//每当有一个可触发的异步回调就task.push(p);

    eval(code);
    while (true) {
        if (task.length !== 0) {
            var p = task.shift();
            p();
        }
    };
}

main(all.js)