关于 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
.
调用该函数
各位!
我正在阅读一些代码以尝试学习 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
.