Javascript 这两种要求有什么区别?

What is the difference between these two kind of requiring in 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;

我只是想问一下,这两种写法是一样的还是有一些区别?

我也想知道 meaning/difference 是什么,如果我对第二个命令使用类似下面的内容:

var Schema = require('mongoose')('Schema');

是一样的。 require是一个普通函数,其中returns一个值。因此,如果该值也是一个函数,您可以立即调用它,或者如果它是一个对象,则可以使用它的属性之一。

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

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

第二种情况,正确的单行写法是var Schema = require('mongoose').Schema;

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