在处理 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 中的赋值所改变。

10-06 07:33