2012-03-28 33 views
0

在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()找不到猫鼬了。

回答

2

这是一个常见的错误在javascript中声明几个相同的变量在相同的语句期望您声明一个局部变量相等。

var a = b = 42; 

这将创建一个局部变量a和全局变量b。首先使b等于42,然后a等于b

你想要做什么是

var a = 42, b = 42; 

var b = 42; 
var a = b; 

在你的第一个db.js代码,exports已经是本地的模块,做variable = mongoose = 'whatever';创建一个名为mongoose全局变量。在第二个db.js代码中,你声明mongoose是本地的。

+0

非常感谢你! – Himmel 2012-03-30 04:09:46

0

@DeaDEnD是对的。最简单的方法来避免这是通过以下这种模式:

var mongoose = module.exports = function() { } 

module已经是全球由于CommonJS的规范,这样这很好。

相关问题