async

javascript是一门单线程语言,即一次只能完成一个任务,若有多个任务要执行,则必须排队按照队列来执行(前一个任务完成,再执行下一个任务)。

这种模式执行简单,但随着日后的需求,事务,请求增多,这种单线程模式执行效率必定低下。只要有一个任务执行消耗了很长时间,在这个时间里后面的任务无法执行。常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。(弊端)

为了解决这个问题,javascript语言将任务执行模式分成同步和异步:

同步模式: 后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的。

异步模式: 每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

异步结局方案

1、回调函数

回调函数的定义:
函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。

//定义A函数,回调函数作为参数
function A(callback) {
    callback();  
    console.log('我是主函数');      
}
 
//定义回调函数
function B(){
    setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作  
}
 
//调用主函数,将函数B传进去
A(B);
 
//输出结果
我是主函数
我是回调函数

可以看见,即使我们把回调函数放在 “console.log(‘我是主函数’); ”前面,先打印输出的依旧是主函数的consloe.log()里面的语句。所以回调函数是否执行完,执行多长时间是不会影响主函数的执行,即使回调函数还没执行完,主函数却依然在执行着自己的代码内容。

2、事件监听

我们也能使用事件监听的方法来解决问题,为事件绑定一个事件监听函数,此时任务的执行不取决代码的顺序,而取决于某一个事件是否发生。
常见的监听函数有onlistenaddEventListener

1、 onclick():
onclick方法对于一位程序员来说是一个非常常见的方法了,作为一个鼠标点击事件,为他绑定一个事件,通过点击鼠标触发。

element.onclick=function(){
   //处理函数
}

缺点:当同一个元素被绑定多个点击事件时,只有最后一个生效。

2、addEventListener()

//标准addEventListener
elment.addEvenListener("click",fun1,false);
elment.addEvenListener("click",fun2,false);
elment.addEvenListener("click",fun3,false);

3、listen()

app.listen(3000,()=>{
    console.log("服务启动成功")
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值