有关Node.js语法的问题

时间:2018-03-27 05:48:42

标签: node.js node-modules

大家好!

我正在阅读一些代码以尝试学习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");

非常感谢!

1 个答案:

答案 0 :(得分:1)

要理解这一点,你需要首先在JavaScript函数中理解First-Class Functions,将函数看作常规变量。因此,您可以将这些作为参数传递给其他函数callbacks,或者您可以从函数aka Closure返回一个函数。您还可以将函数存储到另一个变量中。

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

您的问题的答案:

1

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

逗号后发生了什么?我们设置默认值吗?我们从未宣布过相册,那么我们如何设置默认值?

  

答案:

是的,我们正在设置默认值,但不是您声明的变量,而是将这些默认值传递给" 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");
  

答案:

正如我们上面讨论的那样,函数是First-Class Functions。在这里"时刻" module返回一个构造函数,你在需要它之后调用该构造函数。虽然可以按照以下方式完成:

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

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

同样的概念是模块debug,它返回一个函数,你在带有参数json的require之后调用该函数。