Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript变量-更改原始值的新变量_Javascript - Fatal编程技术网

JavaScript变量-更改原始值的新变量

JavaScript变量-更改原始值的新变量,javascript,Javascript,我已经有一段时间没有接触JavaScript了,但有些事情让我感到困惑,很简单,我只知道我应该知道它,但在过去的一个小时里它让我头痛不已 情景 Mop = { els : [], pool : [], generate : function(){ for (var i=0; i<Mop.els.length; i++){ Mop.pool.push(i) } }, oneAtime : { p : Mop.pool, runi

我已经有一段时间没有接触JavaScript了,但有些事情让我感到困惑,很简单,我只知道我应该知道它,但在过去的一个小时里它让我头痛不已

情景

Mop = {
  els : [],
  pool : [],
  generate : function(){
    for (var i=0; i<Mop.els.length; i++){
      Mop.pool.push(i)
    }
  },
  oneAtime : {
    p : Mop.pool,
    runit : function(){
      timerID = window.setTimeout(function(){
        Mop.show()
      });
    }
  },
  show : function(){
     var p = Mop.oneAtime.p;
     var r = Math.floor(p.length * Math.random());
     p.splice(r,1);
  },
  init : function(){
    Mop.els = $(".cells");
    Mop.generate();
    Mop.oneAtime();
  }
}
Mop.init()
用一种冗长的方式说这是变量赋值的问题。但我想我应该展示一下背景

简言之,调用Mop.show会影响数组Mop.pool和Mop.oneAtime.p,即使后者被分配了Mop.pool值,并且Mop.pool不会再次被触及。拖把池必须保持不变


我可以听到有人嘲笑这一定很容易,但我就是不明白为什么这两个阵列都会受到拼接方法的影响!作用域、闭包之类的,我敢打赌,我已经尝试了我能想到的一切…

JavaScript在将数组分配给变量时不会创建数组的副本。p和Mop.oneAtime.p引用相同的数组。可能的重复我还假设您的实际代码略有不同,因为在您的示例中,p:Mop.pool将抛出运行时错误Moo此时没有值。我从更长的代码中提取了有意义的位。我认为关键的问题是如何将一个变量数组分配给另一个变量并对其进行修改,而原始变量会受到影响?我已经在谷歌上搜索过了,但我想我真的不知道该怎么说!我想你是说没有。您可以通过克隆或复制数组来实现这一点。如链接问题所示。