首页 > 解决方案 > 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');

标签: javascriptfunctionsyntaxrequire

解决方案


这是相同的。require是一个普通函数,它返回一个值。因此,如果该值也是一个函数,您可以立即调用它,或者如果它是一个对象,则使用它的一个属性。

但是,在第二种情况下,require('mongoose')(Schema)会导致两个错误:

  1. 这里require返回一个对象,而不是一个函数,所以你不能调用它。
  2. 您正在使用Schema尚未定义的变量,并将其作为参数传递给函数。

在第二种情况下,将它放在一行中的正确方法是var Schema = require('mongoose').Schema;

在第一种情况下,我认为正确的方法是var FileStore = sessionFileStore(session);我假设这里session是一个全局变量,或者之前已经定义过。


推荐阅读