关于 Node.js 语法的问题

Questions regarding Node.js syntax

各位!

我正在阅读一些代码以尝试学习 node.js,它可用 here

无论如何,我对JS的一些语法有一些疑问。第一位在 index.html

1.

var argv = require("minimist")(process.argv.slice(2), {
default: { albums: true }
});

逗号后面是什么?我们要设置默认值吗?我们从来没有声明过专辑,那么我们如何设置默认值?

2.

当我们有一个模块,然后是括号中的语句时,我们怎么称呼它?这是重写构造函数的一部分吗?

var sinceDate = require("moment")(argv.sinceDate, "YYYY/MM/DD");
var sinceDate = require("moment")(argv.sinceDate, "YYYY/MM/DD");
if (!sinceDate.isValid()) {
  require("debug")("download")(
    "invalid sinceDate '" +
      argv.sinceDate +
      "', date filter disabled (get all)."
  );
  sinceDate = 0;
}

在get_all.js中,用在第三行

var debug = require("debug")("json");

非常感谢!

要理解这一点,您需要先了解 JavaScript 中的函数是 First-Class Functions,意思是函数可以被视为常规变量。因此,您可以将这些作为参数传递给其他函数 callbacks,或者您可以 return 来自函数 Closure 的函数。您也可以将函数存储到另一个变量中。

更多:https://developer.mozilla.org/en-US/docs/Glossary/First-class_Function

您问题的答案:

1.

var argv = require("minimist")(process.argv.slice(2), {
default: { albums: true }
});

逗号后面是什么?我们要设置默认值吗?我们从来没有声明过专辑,那么我们如何设置默认值?

Answer:

是的,我们正在设置默认值,但不是为您声明的变量设置默认值,而是您将这些默认值传递给 "minimist" 模块。该模块可能正在使用 albums 并且您要求它 albums 的默认值为 true。

2.

当我们有一个模块,然后是括号中的语句时,我们怎么称呼它?这是重写构造函数的一部分吗?

var sinceDate = require("moment")(argv.sinceDate, "YYYY/MM/DD");
var sinceDate = require("moment")(argv.sinceDate, "YYYY/MM/DD");
if (!sinceDate.isValid()) {
  require("debug")("download")(
    "invalid sinceDate '" +
      argv.sinceDate +
      "', date filter disabled (get all)."
  );
  sinceDate = 0;
}

在get_all.js中,用在第三行

var debug = require("debug")("json");

Answer:

正如我们上面讨论的函数 First-Class Functions。这里 "moment" 模块正在 returning 构造函数,您在需要它之后调用该构造函数。虽然可以按如下方式完成:

var moment = require("moment");
var sinceDate = moment(argv.sinceDate, "YYYY/MM/DD");

在上面的代码中,我需要一次 moment 库并将其用作 sinceDate 的构造函数。

相同的概念适用于模块 debug,它 return 正在调用一个函数,并且您在 require 之后使用参数 json.

调用该函数