RequireJS来自另一个模块的模块内部模块

时间:2016-09-18 19:53:33

标签: javascript requirejs

我在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数组?

1 个答案:

答案 0 :(得分:0)

你在做什么与做的基本没什么不同:

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

为什么ab = [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;
});