从另一个模块中修改模块中的数组

RequireJS modyfing array inside module from another module

本文关键字:模块 数组 修改 另一个      更新时间:2023-09-26

我有以下模块名为maps2在require JS:

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]
[]

我有点困惑。为什么第三控制台日志产生[]而不是修改z后调用changeZ函数数组?

你所做的与你所做的本质上没有什么不同:

var a = [];
var b = a;
b = [1, 2, 3];

为什么b = [1, 2, 3]之后要改变a的值??在你的代码中,字段z的模块的返回值是从变量z初始化的,但如果你分配给变量z,为什么该字段的值要改变?

如果您希望changeZ影响从模块返回的值,您可以这样做:

define([], function(){
    var exports = {
        z: [],
        changeZ: changeZ
    };
    function changeZ(){
        exports.z = [1,2,3];
        console.log(exports.z);
    }
    return exports;
});