js同步异步

js是单线程的

所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。

js最大的特点就是单线程的

为什么js是单线程?

JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。

JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。

同步异步

所有的任务分为两种:

一种是同步任务(synchronous)

另一种是异步任务(asynchronous)

同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;

异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

(把耗时的放在一边,等同步任务的都执行完之后,执行异步任务)

异步任务有哪些:定时函数setTimeout和setInterval; DOM事件绑定; Ajax操作; NodeJS中的fs文件读写 等。

异步案例:

console.log('0');

    setTimeout(function(){
        console.log('1');
    },1000)

    setTimeout(function(){
        console.log('2');
    },500)
    
    setTimeout(function(){
        console.log('3');
    },0)

    console.log('4');

此时的setTimeout(),就是一个异步任务 。

先放进任务队列中,等同步代码执行完毕,再来执行他。

执行结果顺序为:0 4 3 2 1 

 js为什么需要异步那

如果JS中不存在异步,只能自上而下执行,万一上一行解析时间很长,那么下面的代码就 会被阻塞。

对于用户而言,阻塞就意味着"卡死",这样就导致了很差的用户体验。

js单线程又是如何实现异步的呢?

通过事件循环(event loop)实现'异步'。

异步任务有哪些呢?

定时函数setTimeout和setInterval; DOM事件绑定; Ajax操作; NodeJS中的fs文件读写 等。

Event Loop 事件循环

只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值