这是NodeJS中的变量范围错误还是我需要更多的睡眠

luc*_*eer 4 javascript scope node.js

在一个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' } ]

我正在分配testObjto 的值cachedObj,并且testObj永远不会传递给模块方法.testObj应该(据我所知)永远不会被修改.

事实上,cachedObj肯定永远不会被修改,因为它永远不会从mod.process方法返回.我哪里错了?

(运行节点0.6.9)

AKX*_*AKX 6

这不是一个错误,它是完全预期的行为.

JavaScript中的变量通过引用传递,因此原始对象将通过赋值进行变异process.