Работая над проектом NodeJS, я столкнулся с этим очень неожиданным поведением, которое я не могу обойти: мне кажется, что это ошибка, но, возможно, я просто неправильно понимаю, как работают модули NodeJS.
Я сократил его до уровня теста следующим образом:
модуль mod.js
exports.process = function(obj) { obj.two = 'two'; };
файл test.js
var testObj = {one: 'one'};
console.log(['Before:', testObj]);
var cachedObj = testObj;
require('./mod').process(cachedObj);
console.log(['After:', testObj]);
Затем выполнение $ node test.js
дает мне следующее:
[ 'Before:', { one: 'one' } ]
[ 'After:', { one: 'one', two: 'two' } ]
Я присваиваю значение testObj
для cachedObj
, а testObj
никогда не передаетсяметод модуля.testObj
следует (насколько я вижу) никогда вообще не изменять.
На самом деле, cachedObj
также, безусловно, никогда не следует изменять, так как он никогда не возвращается изmod.process
метод.Куда я иду не так?
(работает Node 0.6.9)