概述
一、单线程
(1)单线程的概念
JavaScript是一门单线程的语言,JavaScript在同一个时间只能做一件事,单线程意味着,如果在同个时间有多个任务的话,这些任务就需要进行排队,前一个任务执行完,才会执行下一个任务
// 同步代码
function fun1() {
console.log(1);
}
function fun2() {
console.log(2);
}
fun1();
fun2();
// 输出
1
2
为什么会有同步和异步
因为JavaScript的单线程,因此同个时间只能处理同个任务,所有任务都需要排队,前一个任务执行完,才能继续执行下一个任务,但是,如果前一个任务的执行时间很长,比如文件的读取操作或ajax操作,后一个任务就不得不等着,拿ajax来说,当用户向后台获取大量的数据时,不得不等到所有数据都获取完毕才能进行下一步操作,用户只能在那里干等着,严重影响用户体验
因此,JavaScript在设计的时候,就已经考虑到这个问题,主线程可以完全不用等待文件的读取完毕或ajax的加载成功,可以先挂起处于等待中的任务,先运行排在后面的任务,等到文件的读取或ajax有了结果后,再回过头执行挂起的任务,因此,任务就可以分为同步任务和异步任务
(2)同步任务
同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务,当我们打开网站时,网站的渲染过程,比如元素的渲染,其实就是一个同步任务
(3)异步任务
异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程,当我们打开网站时,像图片的加载,音乐的加载,其实就是一个异步任务
异步模式定义:
不会等待这个任务结束才会开始进行下一个任务开始
开启过后立即执行下一个任务
逻辑一般通过回调函数的方式定义
console.log('global data')
setTimeout(()=>console.log(111),2000)
setTimeout(()=>{
console.log(222)
setTimeout(()=>{
console.log(333)
},1000)
},2000)
console.log('end')
global data
end
111
222
333
回调函数 : 异步的根本
是将函数作为参数去传递,函数内部处理完成再执行回调处理
function foo(callback){
console.log('执行函数逻辑')
// 处理完本函数内部,再执行回调
setTimeout(() => {
callback()
}, 2000);
}
foo(()=>{
console.log('执行回调函数')
})
最后
以上就是鲤鱼信封为你收集整理的JS 同步与异步的全部内容,希望文章能够帮你解决JS 同步与异步所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复