大家好!
我正在阅读一些代码以尝试学习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");
非常感谢!
答案 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之后调用该函数。