Javascript 全局变量作用域/覆盖拼接

标签 javascript arrays splice

我有一个问题我无法弄清楚,所以非常感谢任何帮助。

  • 在我的 scipt 顶部,我声明了一个全局值 ('_raw')
  • (使用 jQuery)我进行 Ajax 调用,它返回 JSON 数组数据(我有 检查,JSON数据是正确的)
  • 我获取此 JSON 响应并将其分配给 _raw
  • 当我点击一个链接时,_raw 被传递给一个函数,例如函数 myFunction(dataArray),调用 myFunction(_raw)
  • 在这个函数中,基于一些 标准,dataArray被拼接(即dataArray.splice(2,1))
  • dataArray 然后返回。

例如

var _raw;

// AJAX call sets RAW to an array e.g. Apple, Banana, Pear, Pineapple, Coconut, Raspberry

myFunction(dataArray){
  var data=dataArray;
  data.splice(2, 1);
  return data[0];
}


$('a').click(function(){

  result = myFunction(_raw);
  alert(result);
// First time this is run, returns 'Pear', however, second time, returns 'Coconut'- as if the splice is being performed on _raw as well as myArray/data...

});
  • 感谢上面有一些糟糕的代码,这更能说明问题

我遇到的问题是,据我所知,设置 _raw 的唯一时间是在 AJAX 调用期间,但是,当调用函数 myFunction 时,传递 _raw,拼接似乎也影响了 _raw 本身。为什么会这样?

最佳答案

在 JavaScript 中,数组总是通过引用传递,因此当您将它分配给数据变量时,您只是创建了一个指向 _raw 的指针,所有操作都将在 _raw 上完成。

您需要复制数组。根据其中的内容以及它是否是多维的,您可能需要使用一种方法来根据 here 进行深度复制。 .

关于Javascript 全局变量作用域/覆盖拼接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10009723/

相关文章:

javascript - 当用户滚动到元素上方 50px 时向元素添加类?

javascript - 将项目返回到数组中

javascript - 拼接删除错误的索引

javascript - 如何检查特定页面是否已在 Google Chrome 中打开?

javascript - 带有滑动图片的动态 jQuery 菜单

arrays - 根据数组验证字符串

Java二维对象数组——如何检查某个索引是否存在?

java - 创建大量数组

python - Python声音拼接

javascript - 如何使用 Sequelize 按最后一条消息日期订购联系人?