几句话看懂同步和异步的区别

968 阅读2分钟

hello,小伙伴们,初次在掘金见面,我今天给大家分享的文章是,JavaScript中的同步和异步的区别,之前也一直在理解这个同步和异步,不过是迷迷糊糊的,也是最近才把这个区别给弄明白。

JavaScript单线程理解

单线程模型指的是,JavaScript 只在一个线程上运行。也就是说,JavaScript同时只能执行一个任务,其他任务都必须在后面排队等待。

注意,JavaScript 只在一个线程上运行,不代表JavaScript引擎只有一个线程。事实上,JavaScript引擎有多个线程,单个脚本只能在一个线程上运行(称为主线程),其他线程都是在后台配合。

例子:这个线程,我们可以理解为去银行排队办理业务,我们排在队伍里面,只有前面的人把业务办理完成后,我们才能进行业务办理哦。这里可以这么理解这个线程。

同步任务

看下面这个简单的例子

function a(){
    console.log('a')
}

function b(){
    console.log('b')
}
a()
b()

最后打印出来的结果就是 a b 先执行a函数,再执行b函数。

下面如果我们给a函数设置一个延时,那么a函数会等待这个延时。

setTimeout(function a(){
    console.log('a')
}, 500)

function b(){
    console.log('b')
}

b()

结果是先出现b再打印出a这个例子就是我们一般的异步操作。

异步

说到异步操作就要说一下这个回调函数

function f1(){
    ...
}

function f2(){
    ...
}
f1()
f2()

如果f1是异步操作,那么f2会直接执行,那么就不用等待f1了

我们来修改成回调函数

function f1(callBack){
    callBack()
}

function f2(){
    ...
}

f1(f2)

回调函数的优点是简单、容易理解和实现,缺点是不利于代码的阅读和维护,各个部分之间高度耦合(coupling),使得程序结构混乱、流程难以追踪(尤其是多个回调函数嵌套的情况),而且每个任务只能指定一个回调函数。

这就是我对同步和异步的理解,如若有有什么问题,欢迎大家指出来哈,我们一同学习进步。