Javascript 为什么exports和require()会创建一个全局变量?
在db.js中Javascript 为什么exports和require()会创建一个全局变量?,javascript,node.js,Javascript,Node.js,在db.js中 exports = mongoose = require('mongoose') 在output.js中 exports.log = function() { console.log(mongoose) } 在app.js中 var mg = require('./db.js') var output = require('./output.js') output.log() //output mongoose 如果我将db.js更改为: var mongoose
exports = mongoose = require('mongoose')
在output.js中
exports.log = function() {
console.log(mongoose)
}
在app.js中
var mg = require('./db.js')
var output = require('./output.js')
output.log() //output mongoose
如果我将db.js更改为:
var mongoose = require('mongoose')
exports = mongoose
然后output.log()再也找不到猫鼬了 javascript中的一个常见错误是,在同一语句中声明多个彼此相等的变量,而您需要声明一个局部变量
var a = b = 42;
这将创建一个局部变量a
和一个全局变量b
。首先使b
等于42
,然后使a
等于b
你想做的是
var a = 42, b = 42;
或
在第一个db.js代码中,
exports
已经是模块的本地代码,执行variable=mongoose='whatever'
创建一个名为mongoose
的全局变量。在截取的第二个db.js代码中,您将猫鼬
声明为本地。@DeaDEnD是正确的。避免这种情况的简单方法是遵循以下模式:
var mongoose = module.exports = function () { }
由于CommonJS规范,模块
已经是全局的,所以这很好
var mongoose = module.exports = function () { }