2016-09-18 130 views
0

我在下面一个名为maps2模块需要JS:RequireJS从另一个模块modyfing内部模块阵列

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

你在做什么本质上不是从做不同:

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

我很抱歉,但我不明白。我没有看到你的例子的类比 - 我没有创建新的变量(很可能是我做的某个地方,但我不知道在哪里),所有的时间我都在maps2模块上运行z变量。你能否提供一些更详细的答案? – Furman