JavaScript异步机制详解

学习JavaScript的时候了解到JavaScript是单线程的,刚开始很疑惑,单线程怎么处理网络请求、文件读写等耗时操作呢?效率岂不是会很低?随着对这方面内容的了解和深入,知道了其中的奥秘。本篇文章就主要讲解一下JavaScript怎么处理异步问题。

一、同步与异步

在介绍JavaScript的异步机制之前,首先介绍一下:什么是同步?什么是异步?

同步

如果在函数返回的时候,调用者就能够得到预期结果(即拿到了预期的返回值或者看到了预期的效果),那么这个函数就是同步的。
如下所示:

//在函数返回时,获得了预期值,即2的平方根
Math.sqrt(2);
//在函数返回时,获得了预期的效果,即在控制台上打印了'hello'
console.log('hello');

上面两个函数就是同步的。

如果函数是同步的,即使调用函数执行的任务比较耗时,也会一直等待直到得到预期结果。

异步

如果在函数返回的时候,调用者还不能够得到预期结果,而是需要在将来通过一定的手段得到,那么这个函数就是异步的。
如下所示:

//读取文件
fs.readFile('hello.txt', 'utf8', function(err, data) {
   
    console.log(data);
});
//网络请求
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = xxx; // 添加回调函数
xhr.open('GET', url);
xhr.send(); // 发起函数

上述示例中读取文件函数 readFile和网络请求的发起函数 send都将执行耗时操作,虽然函数会立即返回,但是不能立刻获取预期的结果,因为耗时操作交给其他线程执行,暂时获取不到预期结果(后面介绍)。而在JavaSc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值