跳到主要内容

关于Javascript中数组作为函数参数的问题?

管

管理员

https://segmentfault.com/q/1010000019218140

2019年09月18日 2,008 次阅读
本页目录
let arr = [1,2,3,4,5]

function A(_arr){
    _arr[1] = 0
}

A(arr)

console.log(arr) // 1 0 3 4 5


function B(_arr){
    _arr = null
}

B(arr)

console.log(arr) // 1 0 3 4 5

为什么经过函数B,arr没有变成null, 从函数A来看明明传递的是引用啊

 

传递的是引用,不过是把引用保存到_arr变量上,你再把此变量赋值为其他的东西,对原有的没有任何影响

参数传递的时候,变量是有重新复制一遍的,第一个变了是因为复制的还是之前的内存地址,改的内部的值。第二个是把整个复制的内存地址都改变了,直接为Null。
也就是说参数传递的时候再方法里面是有开辟新的内存空间,像对象数组这种开辟了新内存间,但是复制的旧内存地址。

总结:

引用数据类型`参数复制地址`相当于门牌号`在栈内存中`修改引用数据类型的成员参数相当于修改堆内存`直接为null相当于只把复制后的门牌号(栈内存)清空

Related

相关文章

同分类文章 →
2025年06月10日 前端

gemini-2.5-pro-0605 按图生成html效果测试

Gemini 最新推出的 2.5 版本真的有点东西。之前用过不少 AI 辅助写代码的工具,但这次它的“图生 HTML”功能确实让我眼前一亮——上传一张设计图,它不仅能快速识别布局和元素,还能生成结构清晰、样

2025年03月14日 前端

css flex-1和overflow-hidden结合使用详解:弹性布局与内容溢出控制

在 Flexbox 布局中,flex: 1 和 overflow: hidden 是两个常用的属性,它们组合使用可以有效地控制子元素的尺寸和内容显示。flex: 1 的作用:当子元素设置 flex: 1 时,它会根据 Flex 容器的主轴方向,自动伸缩以填充剩余的可用

2025年03月13日 前端

Vue 3中实现处理后的v-model双向绑定

在Vue 3中,当你需要对v-model传入的值进行处理后再展示或使用时,可以使用计算属性的getter和setter来实现这种处理过程的双向绑定。 实现步骤 接收父组件传递的v-model值 创建计算属性,在getter中处理展示值,在setter中处

WeChat

扫码加我微信

微信二维码