2012-03-28 3 views
0

в db.jsПочему экспорт и require() создают глобальную переменную?

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

0

@DeaDEnD является правильным. Самый простой способ избежать этого, следуя этой схеме:

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

module уже глобальный из-за CommonJS спецификации, так что это нормально.

Смежные вопросы