【发布时间】:2017-02-27 04:23:46
【问题描述】:
我有 2 个文件:
testrequire.js
let a = {};
function foo() {
a = 'test';
};
module.exports.foo = foo;
module.exports.a = a;
test.js
let a = require('./testrequire');
a.foo();
console.log(a);
当我运行test.js 时,结果如下:
{ foo: [Function: foo], a: {} }
但我预计会是这样:
{ foo: [Fuction: foo], a: 'test' }
但是,当我像这样更改 testrequire.js 时:
let a = {};
function foo() {
a.b = 'test';
};
module.exports.foo = foo;
module.exports.a = a;
结果是:
{ foo: [Function: foo], a: { b: 'test' } }
这完全符合我的预期。
这里的问题是:为什么函数foo()可以修改a的属性而不能修改a?
P/S:我确实尝试过var 而不是let,结果还是一样。所以肯定不是 ES6 let 的错。
【问题讨论】:
-
您已将
a定义为一个对象。对象包含键值对。所以,试着在你的第一个例子中写a={b: 'test'}。
标签: javascript node.js scope