我在require JS中有以下名为maps2的模块:
define([], function(){
var z = [];
function changeZ(){
z = [1,2,3];
console.log(z);
}
return {
z: z,
changeZ: changeZ
}
});
和主文件:
requirejs(['maps2'], function(maps2){
console.log(maps2.z);
maps2.changeZ();
console.log(maps2.z);
});
问题在于:我期待的结果如下:
[]
[1,2,3]
[1,2,3]
然而我得到了结果:
[]
[1,2,3]
[]
我有点困惑。为什么第三个console.log在调用[]
函数后生成z
而不是修改后的changeZ
数组?
答案 0 :(得分:0)
你在做什么与做的基本没什么不同:
var a = [];
var b = a;
b = [1, 2, 3];
为什么a
后b = [1, 2, 3]
的值会被更改?在您的代码中,模块返回值的字段z
是从变量z
初始化的,但如果您指定给变量z
,为什么要更改字段的值?
如果您希望changeZ
影响从您的模块返回的值,您可以执行以下操作:
define([], function(){
var exports = {
z: [],
changeZ: changeZ
};
function changeZ(){
exports.z = [1,2,3];
console.log(exports.z);
}
return exports;
});