【问题标题】:RequireJS modyfing array inside module from another moduleRequireJS从另一个模块修改模块内的数组
【发布时间】:2016-09-18 19:53:32
【问题描述】:

我在 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在调用changeZ函数后生成[]而不是修改z数组?

【问题讨论】:

    标签: javascript requirejs


    【解决方案1】:

    你在做的事情和做的事情本质上没有什么不同:

    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;
    });
    

    【讨论】:

    • 我很抱歉,但我不明白。我没有从您的示例中看到类比 - 我没有创建新变量(很可能是我在某个地方创建的,但我看不到在哪里),我一直在从 maps2 模块操作 z 变量。能否请您提供更详细的答案?
    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 2017-07-25
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多