为什么我的函数在修改数组时会更改参数? [复制]

2024-01-05

我不希望 foo 在此示例中发生任何更改,但是当我将其修改为函数中的数组时,它会更改参数。注意 foo 没有被 function1 改变...我猜是因为它没有直接修改参数???任何避免这种情况的帮助将不胜感激。

http://jsfiddle.net/t47kD/ http://jsfiddle.net/t47kD/

var foo = [1,2,3];

bar = function1(foo);
bar = function2(foo);
bar = function3(foo);


function function1(newFoo){
    newFoo = [newFoo,'a',1];
    return newFoo;
} //foo after function1 = 1,2,3


function function2(newFoo){
    newFoo[0] = 'a';
    return newFoo;
} //foo after function2 = a,2,3


function function3(newFoo){
    newFoo.push('4');
    return newFoo;
} //foo after function3 = a,2,3,4

对象(包括数组)在 ECMAScript 中通过引用分配。因此,当您修改函数中的数组时,您修改的是传递给函数的同一个数组,而不是数组的新副本。

执行数组浅拷贝的一种快速方法是使用slice(0) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice(在某些现代引擎中,您可以省略0). See 这个答案 https://stackoverflow.com/a/7486130/772035关于复制数组。

另请参阅这个答案 https://stackoverflow.com/a/3638034/772035举一些例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的函数在修改数组时会更改参数? [复制] 的相关文章

  • GWT - onClick 未触发

    我在表单上有一个非常奇怪的行为 有许多具有内联验证的文本字段 如果内容无效 则会在字段下方显示错误消息 验证在模糊时触发 页面底部有一个 下一步 按钮 单击后 将执行验证 如果一切正常 则提交表单 现在 如果当我单击按钮时强制空白字段具有焦
  • 通过jquery在日期框中自动添加斜杠/符号[重复]

    这个问题在这里已经有答案了 我发现几个问题但没有答案 所以我问问题 如何添加自动斜杠 符号
  • Three.js - 如何使用姿势估计数据为 3D 模型制作动画

    我正在尝试使用姿势估计坐标来对 Three js 中的装配模型进行动画处理 我正在使用的姿势估计技术提供了视频源中人物的实时 x y z 坐标 我正在尝试使用这些坐标相应地移动 3D 模型 我使用下面的代码 其中一些代码是我在相关问题的答案
  • 重命名从 HTML5 画布创建的图像

    我制作了一个简单的画布并将其另存为图像 我在这段代码的帮助下做到了这一点 var canvas document getElementById mycanvas var img canvas toDataURL image png 并弹出创
  • 如何检测我正在 eval() 调用中?

    是否存在字符串s这样 new Function s and eval s 表现不同 我正在尝试 检测 字符串的评估方式 检查是否有arguments目的 如果它存在 那么您就在该函数中 如果没有 那就已经是evaled 请注意 您必须将支票
  • 从提交的表单中获取值

    我有一个非常简单的表格
  • LitElement 不更新列表中的复选框

    我有一个简单的清单 每个项目都有一个删除按钮 当我选中第一个项目然后删除它时 列表会更新 删除该项目 但会选中下一个项目的复选框 下一项的属性是正确的 这是我的代码 import LitElement html from lit eleme
  • Google 地图自动完成 - 最多 3 个字符类型

    我已经实现了带有搜索框的谷歌地图 它允许用户通过搜索来选择地址 在该搜索框中 即使我输入 1 个字符 它也会进行搜索 我希望用户至少输入 3 个字符 否则它不应该进行搜索 My JS Fiddle is http jsfiddle net
  • 处理重叠 SVG 图层中的鼠标事件

    我正在使用 d3 js 构建地图可视化 我正在为美国各州和县绘制填充多边形 县的 SVG 图层位于州图层下方 状态已填充 但填充不透明度设置为 0 我认为 需要填充来捕获点击事件 我想捕获州级的点击事件 但我想捕获县级的鼠标悬停事件 但是
  • 是否有管理 __utma、__utmz 等 cookie 的标准?

    无论我登录 Facebook 还是 Twitter 我都会受到以下名称的 cookie 轰炸 utma utmb utmc utmv 它们的功能是什么 是否有一个标准来管理这些在服务器端的使用方式 这些 cookie 通常与谷歌分析 htt
  • 如何禁用 Firebase 电话身份验证 reCAPTCHA? (网络/反应)

    我正在构建一个 React Firebase 应用程序并使用 Firebase 的 PhoneAuthProvider 进行身份验证 在开发过程中 需要进行大量的登录和注销来测试身份验证流程 私有路由 登录重定向等 每次我需要登录时 都会向
  • 获取顶部框架的 URL

    在 Facebook 应用程序中 我需要检查顶部框架 主窗口 URL 是什么 并相应地显示内容 我尝试使用以下内容 if top location toString toLowerCase indexOf facebook com lt 0
  • Google Maps API v3 在地图加载后不会禁用滚轮

    我正在网站上实现谷歌地图 一切都工作得很好 除了地图加载后我似乎无法禁用滚轮 如果我在地图加载之前将选项设置为scrollwheel false 则滚轮将被禁用 但如果我稍后尝试执行此操作 我有一个启用 禁用滚轮的复选框 以下是我在页面加载
  • 与 webpack 捆绑后,无法读取枚举的未定义属性

    我有一个 React 库 我想使用 Webpack 来构建它 该库是使用 Typescript 编写的 似乎一切正常 但由于某种原因枚举却不起作用 当我将库安装到我的 React 应用程序中时 我发现Cannot read properti
  • 在 Angularjs 中格式化输入值

    我正在尝试编写一个指令 自动格式化数字
  • 反应:无效的挂钩调用。钩子只能在函数组件体内调用

    我花了两天时间试图了解错误在哪里 知道吗 App js import React useState useEffect from react import Menu from components Menu function App ret
  • fs.statSync 与缓冲区“错误:路径必须是没有空字节的字符串”

    我已经读入这样的文件缓冲区 let imageBuffer try imageBuffer fs readFileSync some path to image jpg catch e console log error reading i
  • 保持 WebSocket 连接处于活动状态

    我正在研究 WebSocket 协议 并尝试在后端使用 Python 实现一个简单的 ECHO 服务 它似乎工作正常 但连接建立后立即断开 这是我的客户
  • 使用 JS 从列表中删除最近的 元素的 URL

    所以我有一个网址列表 并且有删除按钮 图像按钮 当点击删除按钮时 按钮旁边的 url 必须从列表中删除 let list const remove document getElementById remove const view docu
  • Highcharts 异步服务器加载多个系列

    我正在尝试按照其示例使用 Highcharts 的延迟加载 http www highcharts com stock demo lazy loading http www highcharts com stock demo lazy lo

随机推荐