代码之家  ›  专栏  ›  技术社区  ›  Yilmaz

在express.js源代码中传递参数的奇怪方式

  •  1
  • Yilmaz  · 技术社区  · 4 年前

    当我在寻找快速路由器的源代码时,我看到了这个:

        var debug = require('debug')('express:router:route');
    

    有人能解释一下这种传递论点的方式是什么意思吗?

    3 回复  |  直到 4 年前
        1
  •  4
  •   Andy Ray    4 年前

    在Javascript中,函数是“第一类”,这意味着它们可以像任何其他值一样被传递。

    require('debug') 返回函数。在中,默认导出 debug npm包是一个函数,而不是一个对象。

    然后用字符串调用该函数 "express:router:route"

    partial application . 这个 不是 不过,这只是部分应用的一个例子,它只是:

    var debug = require('debug');
    debug('express:router:route');
    

    require 不是要部分应用的函数,它只是意味着 调试 包正在返回一个函数,它正在原地执行。

        2
  •  3
  •   Mikkel    4 年前

    你的头脑有点难,但值得学习

    什么是咖喱?

    curring是 我们可以将具有多个参数的函数转换为 嵌套函数的序列。它返回一个新函数 内联的下一个参数。它不断地返回一个新函数 争论已尽。参数保持“活动”(通过闭包) 当curring中的final函数 链被返回并执行。

    更多信息请点击此处: https://blog.bitsrc.io/understanding-currying-in-javascript-ceb2188c339

        3
  •  1
  •   Ismael Padilla    4 年前

    看看 debug link ):

    公开一个函数;只需将模块的名称传递给该函数,它就会返回 console.error 以便将调试语句传递给。这将允许您切换模块不同部分以及整个模块的调试输出。

    require('debug') 返回函数。这个函数可以通过执行 require('debug')(some parameter) . 这意味着以下是可能的(示例取自 上面链接的文档):

    var debug = require('debug')('http')
    

    现在变量 指向调用返回的函数的结果 ,带参数 'http' .