node.js聊天应用程序中callback()的含义或源代码

时间:2011-04-10 05:40:56

标签: javascript jquery callback node.js

我正在尝试浏览节点聊天演示seen here的源代码。在server.js文件和fu.js文件中有一个引用为callback()的函数:

function loadResponseData(callback) { 
if (body && headers && !DEBUG) { //if they already have value
  callback();
  return;
}...

但据我所知,这个函数永远不会被定义,我找不到它作为node.js的模块函数,jquery的函数或javascript的标准函数。

我想我理解回调函数是如何工作的,但是我对这个调用并不熟悉,并且在这个应用程序中经常使用它,我想要深入了解它是什么以及它来自何处。

所以我的问题是三折: 1)基于函数的位置:( javascirpt,jquery,node.js,特别是这个应用程序) 2)我在哪里可以找到此功能的源代码? 3)这个函数如何与它所调用的函数交互?

1 个答案:

答案 0 :(得分:3)

这是loadResponseData函数的参数。如果你这样打loadResponseData

loadResponseData(function () {
      res.writeHead(200, headers);
      res.end(req.method === "HEAD" ? "" : body);
    });

然后callback()中的loadResponseData将执行

res.writeHead(200, headers);
res.end(req.method === "HEAD" ? "" : body);

编辑以澄清评论中的问题:

你可以说这是JavaScript的一个功能。这里重要的是JavaScript是一种函数式语言:它本身就具有数据类型的功能。因此,您可以将它们保存在变量中(实际上,JS中的所有函数名称都是 - 一个函数作为其内容的变量),并将它们传递到参数列表中(如此处所示)。名称callback没有什么神奇之处 - 它也可以是fnwhoopsie7。为了证明:

var doubleAndOne = function(a) {
  return a * 2 + 1;
}
function doItTwice(k, whoopsie7) {
  whoopsie7(whoopsie7(k));
};
doItTwice(5, doubleAndOne); // result is 23

function(...) {...}被称为匿名函数:它是纯函数值,接受一些参数并对它们执行某些操作,但它没有分配给任何名称。要使用名称创建函数,可以将其指定给变量,或将其作为参数传递,就像使用任何其他值一样。例如,:

之间的差别很小
var five = function() { return 5; };
var doubleFuncValue = function(fn) { return fn() * 2; };
doubleFuncValue(five); // result 10

var five = 5;
var doubleNumValue = function(n) { return n * 2; };
doubleNumValue(five); // result 10