【问题标题】:Meaning or source code for callback() in node.js chat appnode.js 聊天应用中 callback() 的含义或源代码
【发布时间】:2011-08-02 08:58:30
【问题描述】:

我正在尝试查看节点聊天演示 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) 这个函数如何与调用它的函数交互?

【问题讨论】:

    标签: javascript jquery callback node.js


    【解决方案1】:

    它是loadResponseData 函数的参数。如果你像这样调用loadResponseData

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

    然后loadResponseData中的callback()将执行

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

    编辑以澄清 cmets 中的问题:

    你可以说它是 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
    

    【讨论】:

    • 所以我正确理解它认为它是javascript的一个特性。一个函数 loadResponseData 被定义了两次,一次以回调作为函数的参数,而命令 callback() 将调用函数的另一个定义?这个实现有什么好的教程吗?使用这种方法的简单例子?
    • 不,loadResponseData只有一个定义,它接受一个函数作为参数并调用它callback,然后从它的主体调用这个函数。在上面的编辑中查看我的可能不是很好的例子。
    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 2011-02-06
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多