javascript - Javascript中这两种要求有什么区别?
问题描述
在一个教程中,我看到了这样的代码:
var session = require('express-session');
var FileStore = require('session-file-store')(session);
另一个像这样的代码:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
但我想我可以像这样编写第一个代码:
var sessionFileStore = require('session-file-store');
var FileStore = sessionFileStore.session;
第二个喜欢:
var Schema = require('mongoose')(Schema);
或者
var Schema = require('mongoose').Schema;
我只是想确定一下,这两种写法是相同的还是有一些不同的?
如果我对第二个命令使用如下所示的内容,我也想知道含义/区别是什么:
var Schema = require('mongoose')('Schema');
解决方案
这是相同的。require
是一个普通函数,它返回一个值。因此,如果该值也是一个函数,您可以立即调用它,或者如果它是一个对象,则使用它的一个属性。
但是,在第二种情况下,require('mongoose')(Schema)
会导致两个错误:
- 这里
require
返回一个对象,而不是一个函数,所以你不能调用它。 - 您正在使用
Schema
尚未定义的变量,并将其作为参数传递给函数。
在第二种情况下,将它放在一行中的正确方法是var Schema = require('mongoose').Schema;
在第一种情况下,我认为正确的方法是var FileStore = sessionFileStore(session);
我假设这里session
是一个全局变量,或者之前已经定义过。
推荐阅读
- c# - 一个容器视图上的多个视图
- python - TypeError:缺少一个必需的位置参数
- python - Python 无法向 Gmail 发送电子邮件
- java - KieBuilderImpl.buildAll 失败并出现 NullPointerException
- apostrophe-cms - 使用游标(不工作)
- amazon-web-services - 网站 HTTP 请求在公共 wifi 上被阻止
- javascript - 这个流错误是什么意思?
- javascript - 控制台中的对象显示带有值的 getter,但在代码中它返回 undefined
- php - 使用 PHP 变量作为另一个变量名的一部分
- c# - 如何知道http post请求中是否使用了代理c#