javascript考点 —— 异步和单线程

一、什么是异步?

如下就是一个简单的异步:

console.log(100)
setTimeout(function() {
    console.log(200)
}, 1000)
console.log(300)

//打印顺序100 300 200

异步和同步最大的区别在于有没有阻塞程序的进行:上面这种情况就没有阻塞程序的进行,程序也没有出现卡顿。如果是同步的,那么就会打印完100,等待1000ms,打印出200,然后才会打印出300.来看如下程序 就是一个同步:

console.log(100)
alert(200)
console.log(300)
//弹出200后,如果不点击确认,程序就会卡在那里,只有等点击了确认,程序才会继续执行

什么时间需要异步?

  • 在可能发生等待的情况下
  • 等待过程中不能像alert一样阻塞程序运行
  • 因此,所有的‘等待情况’都需要异步

二、前端使用异步的场景:

  • 定时任务:setTimeout、setIterval
  • 网络请求:ajax请求、动态<img>加载
//ajax请求
console.log('start')
$.get('./data1.json', function(data1){
    console.log(data1)
})
console.log('end')
//动态加载<img>
console.log('start')
var img = document.createElement('img')
img.onload = function() {
    console.log('loaded')
}
img.src='/xxx.png'
console.log('end')
  • 事件绑定
console.log('start')
document.getElementById('btn1').addEventListener('click', function() {
    alert('clicked')
})
console.log('end')

三、异步和单线程

1、什么是单线程?

console.log(100)
setTimeout(function() {
    console.log(200)
})
console.log(300)
/打印顺序,100, 300, 200

怎么实现的上述打印顺序呢?

  • 执行第一行,打印100
  • 执行setTimeout后,传入setTimeout函数会被暂存起来,不会立即执行(单线程的特点,不能同时干两件事)
  • 执行最后一行,打印300
  • 待所有程序执行完,处于空闲状态时,会立马看有没有暂存起来的要执行
  • 发现暂存起来的setTimeout中的函数无需等待时间,就会立即过来执行

单线程就是一次只能做一件事情,一个个排队的,不能一块执行两个。

四、题目解答

  • 同步和异步的区别是什么?分别举一个同步和异步的例子

解答:同步会阻塞代码执行,而异步不会。alert是同步,setTimeout是异步。

  • 一个关于setTimeout的笔试题

解答:

console.log(1)
setTimeout(function() {
    console.log(2)
}, 0)
console.log(3)
setTimeout(function() {
    console.log(4)
}, 1000)
console.log(5)


//打印顺序为:1,3,5,2,4
  • 前端使用异步的场景有哪些

解答:定时任务、网络请求、事件绑定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值