2016-09-18 78 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