Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么exports和require()会创建一个全局变量?_Javascript_Node.js - Fatal编程技术网

Javascript 为什么exports和require()会创建一个全局变量?

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

在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 = 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 () { }