什么是回调函数?这个偷来的解释讲的很清楚:
对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用-->等待被调用函数执行完毕-->继续执行”
对回调函数调用:调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(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一下,看懂回来改
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);
原文:http://www.cnblogs.com/weihuan098/p/6491036.html