js的同步跟异步

在准备js面试题时,遇到了许多知识盲区,或是已经遗忘的知识,所以来写一下博客,记录自己的成长,同时查漏补缺

异步,原型和原型链,闭包被称为js的三座大山,为何会有异步?那我们要来捋一下

js是一门单线程的语言,通俗点讲就是在一个时间段它只能做一件事,就像一条公路,它一次就只能一辆车通过,不能有两辆车并排着通过的,如果有一辆车,它就停公路上,这样子后面的车没法走,那它就会一直卡着,不会往下执行

看一下代码

    console.log(100)
    
    alert(200)
    
    console.log(300)

如果没有点击确定,接下来的300就不会打印,一直停在那里,点击后,才会打印300

 所以同步会阻塞代码的执行

异步任务是通过回调函数实现的,它不会阻塞代码的执行,

在执行时会等同步任务执行后再添加到同步代码的后面

下面是一个经典的面试题,不知道异步的同学就很容易答错

console.log(1)

setTimeout(function() {
    console.log(2)
},1000)

console.log(3)

setTimeout(function() {
    console.log(4)
},0)

console.log(5)
//                执行的结果是  1  3  5  4  2

在上面图中,定时器0毫秒执行,为何会在第四个才打印出来,因为定时器就属于一个异步任务,所以代码执行时会先把同步任务执行后,才把异步的结果拼接到同步任务后面,再轮到异步任务

什么情况下需要异步,一般而言,异步任务有以下三种类型:1.普通事件,如click点击事件等。2.资源加载,如load,还有通过ajax请求数据。3.定时器,包括setInterval,setTimeout等

//ajax

console.log('start')

$.get('./data1.json',function(data1) {
    console.log(data1)
})

console.log('end')

//打印顺序   start   end    data1的值

像网络请求,同步的任务先执行,如何什么时候请求回来,再打印我们的data1的值,如果一直不回来,那就一直挂着!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值