我正在尝试浏览节点聊天演示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)这个函数如何与它所调用的函数交互?
答案 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
没有什么神奇之处 - 它也可以是fn
或whoopsie7
。为了证明:
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