Javascript中这两种要求有啥区别?

Posted

技术标签:

【中文标题】Javascript中这两种要求有啥区别?【英文标题】:What is the difference between these two kind of requiring in Javascript?Javascript中这两种要求有什么区别? 【发布时间】:2020-05-14 18:37:25 【问题描述】:

在一个教程中我看到了这样的代码:

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');

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

非常感谢!关于第一种情况,您是对的,我忘了添加var session = require('express-session'); 行。但是下一行呢?这是什么意思:var Schema = require('mongoose')('Schema'); 好吧,在这种情况下,您将调用require('mongoose') 返回的de 函数并将字符串Schema 作为参数传递给它,但这不应该工作。 require('mongoose') 返回一个对象,所以这样的一行会抛出一个错误(Object is not a function)。您必须使用:require('mongoose').Schema 能否帮助我理解var FileStore = require('session-file-store')(session); 中的sessionvar router = express.Router() 中的Router() 之间的区别? 最好再问一个问题。我很乐意为您提供帮助,所以这个问题不会因为其他问题而变得臃肿

以上是关于Javascript中这两种要求有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

这两种在 JavaScript 中定义函数的方式有啥区别? [复制]

Java 中这段代码中的 ExecutorService.submit 和 ExecutorService.execute 有啥区别?

这两种符号有啥区别?

这两种方法有啥区别?

这两种类型的闭包有啥区别?

这两种方法有啥区别