欢迎使用CSDN-markdown编辑器

在说回调之前先明白一点,纯JavaScript代码并不是异步的(不使用异步API等)。如果只用JavaScript代码写逻辑处理的话包括使用for循环,程序就是同步的。(有时候自己就不清醒)。

什么是回调函数?这个偷来的解释讲的很清楚:

对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用–>等待被调用函数执行完毕–>继续执行”

对回调函数调用:调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。

所以回调函数的特点就是占用时间比较长(比如I/O,http请求等),使用回调函数就不需要等待回调函数的结果(系统帮你去执行了),程序直接执行你接下来的代码。

但是有段代码不懂:

复制代码
1 var A = function (callback){
2 callback();
3 console.log(“AAAAAAAA”);
4 }
5 var B = function (){
6 for (var i = 0; i < 10000; i++) {
7 }
8 console.log(“BBBBBBBB”);
9 }
10 A(B);
复制代码
显示结果为什么是:

BBBBBB
AAAAAA
是因为函数B中for循环是同步的,并且一直占用CPU吗???????

下面这段代码结果也诡异:BBBBBB,AAAAAA,然后test.txt的内容。

为什么????callback 的调用机制和执行顺序肯定没有刚才说的简单。 mark一下,看懂回来改

看懂了 原来callback函数仍然在主线程中执行,所以,调用callback,当前线程还是会去执行callback碰到IO操作才会真的执行异步。网上有的解释并没有解释清楚。

复制代码
fs = require(‘fs’);
var A = function (callback){
callback();
console.log(“AAAAAAAA”);
}
var B = function (){
fs.readfile(‘test.txt’,’utf-8’,function(err,data){
console.log(data);
});
for (var i = 0; i < 10000; i++) {
}
console.log(“BBBBBBBB”);
}
A(B);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值