在处理 NodeJS 项目时,我遇到了这种非常意外的行为,我无法想出办法 - 这对我来说似乎是一个错误,但也许我只是误解了 NodeJS 模块的运行方式。
我已将其简化为一个测试用例,如下所示:
mod.js 模块
export.process = function(obj) { obj.two = 'two'; };
test.js 文件
var testObj = {one: 'one'};
console.log(['Before:', testObj]);
var cachedObj = testObj;
需要('./mod').process(cachedObj);
console.log(['After:', testObj]);
然后运行 $ node test.js
给我这个:
['之前:',{一:'一'}]
['之后:',{一:'一',二:'二'}]
我将 testObj
的值分配给 cachedObj
,并且 testObj
永远不会传递给模块方法。 testObj
应该(据我所知) 从不修改 。
事实上,cachedObj
也不应该被修改,因为它永远不会从 mod.process
方法返回。我哪里错了?
(运行 Node 0.6.9)
最佳答案
这不是错误,而是完全符合预期的行为。
JavaScript 中的变量是通过引用传递的,因此原始对象被 process
中的赋值所改变。