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),使得程序结构混乱、流程难以追踪(尤其是多个回调函数嵌套的情况),而且每个任务只能指定一个回调函数。
这就是我对同步和异步的理解,如若有有什么问题,欢迎大家指出来哈,我们一同学习进步。