我导入了模块fs,lodash,yargs和express,然后在我需要的变量上使用了typeof。除了fs之外的所有变量都显示为函数
1)我可以理解它是否是一个对象,因为我们使用驻留在该模块中的函数,但所有模块都是函数对我来说没有意义(抱歉,如果它的声音很愚蠢)
2)
const express = require('express');
let app = express();
请您解释一下上面的代码片段(第二行)?我们可以在变量中存储一个执行函数吗?我们在应用程序或整个函数中存储express的返回值,我们进一步使用像app.get()这样的函数就像一个对象
第二点与第一点有关,如果有人可以向我解释,那将会非常有用 谢谢
答案 0 :(得分:1)
JavaScript是一种与Java等其他人不同的编程语言,也许这让您感到困惑。相反,它受到了Scheme的启发。
在JavaScript中,函数是一等公民,这意味着它们可以像任何其他对象一样拥有属性和方法,并且可以像任何对象一样传递和分配它们。请参阅示例https://developer.mozilla.org/en-US/docs/Glossary/First-class_Function以获取对第一类函数的介绍,或参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions以获取JavaScript函数的简介。
这是JavaScript中的核心概念,因此您可能希望了解一些入门书籍以正确掌握语言基础知识。
关于代码:
const express = require('express');
let app = express();
第一行是将一个函数存储到"变量",实际上是一个常量,表达:express=require('express');
然后,我们可以使用"变量"的名称来调用这样的函数。 (或常数)它存储:express()
显然,之前的步骤只能通过JavaScript允许函数被视为"对象"
最后,我们可以照常将变量的调用结果存储在变量中:app = express();
答案 1 :(得分:0)
要回答第一个问题,这取决于您从模块导出的内容,要么导出多个值,要么只导出一个值。
例如,我创建了一个模块Math.js来使用sum和sub方法,我希望这个模块能够返回这些方法。
const sum = function(a, b) {
return a + b;
};
const sub = function (a, b) {
return a -b;
};
module.exports = {
sum,
sub
};
在代码文件中说app.js,我将按要求使用它:
const Math = require('./Math');
const sum = Math.sum(10, 20);
const sub = Math.sub(20, 10);
console.log('Sum: ', sum);
console.log('Sub: ', sub);
你知道,Math.js的目的是返回一个包含多个值的对象。
另一方面,假设我想为每个Math函数创建一个单独的模块。因此Sum.js如下:
module.exports = function(a, b) {
return a + b;
};
和Sub.js如下:
module.exports = function(a ,b) {
return a - b;
};
现在在我的app.js文件中,我将使用以下两个模块:
const sum = require('./Sum');
const sub = require('./Sub');
console.log('Sum: ', sum(10, 20));
console.log('Sub: ', sub(20, 10));
所以在上面的例子中,我只是为每个模块提取一个方法。
在fs模块的情况下,它导出多个值,如果是express,则返回一个用于初始化express应用程序的函数。
为了回答你的第二个问题,首先要理解函数是第一类对象的概念,它意味着你可以对对象做任何事情,
这就是为什么在示例代码中,express模块返回一个函数,该函数存储在表达式的常量中。然后在第二行,app变量初始化,其调用后的express函数的返回值是什么。
const express = require('express');
let app = express();