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);
中的session
和var router = express.Router()
中的Router()
之间的区别?
最好再问一个问题。我很乐意为您提供帮助,所以这个问题不会因为其他问题而变得臃肿以上是关于Javascript中这两种要求有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
这两种在 JavaScript 中定义函数的方式有啥区别? [复制]
Java 中这段代码中的 ExecutorService.submit 和 ExecutorService.execute 有啥区别?