Javascript 数组值会莫名其妙地变化吗?

Javascript 数组值会莫名其妙地变化吗?,javascript,Javascript,因此,我开始将我的一个C#程序移植到Javascript,只是因为这是一个熟悉它的好方法。但是我的阵列遇到了问题;它们是内部的物体,它们在不应该发生变化的时候却一直在奇怪地变化 我从第一个对象RotorSetI检查了两次_in和_out值;首先是在创建对象之后,然后是在RotorSetII对象之后 第一次检查显示_out具有给定的值。但在第二次检查中,它已更改为RotorSetII的_out值 我将在下面发布代码位,但我完全困惑不解我做错了什么? var RotorSetI = (functio

因此,我开始将我的一个C#程序移植到Javascript,只是因为这是一个熟悉它的好方法。但是我的阵列遇到了问题;它们是内部的物体,它们在不应该发生变化的时候却一直在奇怪地变化

我从第一个对象RotorSetI检查了两次_in和_out值;首先是在创建对象之后,然后是在RotorSetII对象之后

第一次检查显示_out具有给定的值。但在第二次检查中,它已更改为RotorSetII的_out值

我将在下面发布代码位,但我完全困惑不解我做错了什么?

var RotorSetI = (function()
{
    var app = {},

    _in  = new Array("P","4","K","Ö","7","M","T","U","G","Q","V","1","J","H","2","Ä","S","I","Y","D","R","X","E","N","W","8","C","B","L","3","5","0","6","Z","F","9","O","A");
    _out = new Array("J","K","X","9","U","C","T","G","4","H","F","B","I","8","D","R","3","7","L","V","Ö","Y","N","1","W","0","S","A","6","Ä","Q","O","Z","P","E","2","5","M");

    app.setIn = function()
    {
        return _in;
    }

    app.setOut = function()
    {
        return _out;
    }

    return app;
}());

console.log(RotorSetI.setIn());
console.log(RotorSetI.setOut()); /* <-- Still shows the right value */

/**
 * ROTOR SET II
 */
var RotorSetII = (function()
{
    var app = {},

    _in  = new Array("E","7","2","Ö","S","N","U","O","J","B","I","L","D","M","H","F","6","Q","P","0","Z","C","T","V","3","W","4","5","1","Y","X","9","Ä","K","8","R","A","G");
    _out = new Array("Ä","6","V","S","H","B","K","F","N","P","M","X","C","W","I","5","Ö","0","4","3","Q","Y","J","Z","D","L","T","9","O","E","U","R","8","2","G","1","A","7");

    app.setIn = function()
    {
        return _in;
    }

    app.setOut = function()
    {
        return _out;
    }

    return app;
}());


console.log(RotorSetI.setIn());
console.log(RotorSetI.setOut()); /* <-- Value has mysterious changed! */

您需要在声明中的
\u末尾添加一个
。您无意中创建了一个名为
\u out
的全局文件,并在
RotorSetII
中覆盖了它

var app = {},
    _in = new Array(...), // <--
    _out = new Array(...);

您需要在
声明中的
\u末尾添加一个
。您无意中创建了一个名为
\u out
的全局文件,并在
RotorSetII
中覆盖了它

var app = {},
    _in = new Array(...), // <--
    _out = new Array(...);

这是因为您正在重用全局变量
\u out
如果每个变量只有一个
var
就不会发生这种情况。@FelixKling在严格模式下也不会发生这种情况。@MikeC:那更好:)因为你在重用全局变量
\u out
。你忘了
var\u in,\u out
如果每个变量有一个
var
就不会发生这种情况。@FelixKling在严格模式下也不会发生这种情况。@MikeC:那更好:)啊哈。。。。是的,我看到了。向我展示这种处理对象方法的文章在其示例中只有一个私有属性,这就是我不知道逗号的原因:)啊哈。。。。是的,我看到了。向我展示这种处理对象方法的文章在其示例中只有一个私有属性,这就是我不知道逗号的原因:)
_in = ["P", ...]