数组作为function的参数,形参改变对实参的影响

鸣鸣Amadues 2015-10-10 10:49:38
刚刚碰到一个问题,我用数组作为function的参数,在里面把形参清空,再重新赋值,返回后发现对实参没有影响。
这个跟我预计的不一样,java里对象和数组都是地址传递,所以形参改了内容,实参会跟着变的。
js里我记得对象是跟java一样的,形参的属性变了,实参也一样会变的,但数组的内容为什么会不变?
...全文
623 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸣鸣Amadues 2015-10-10
  • 打赏
  • 举报
回复
有没有解决值传递的方法?我需要形参可以影响实参的效果
鸣鸣Amadues 2015-10-10
  • 打赏
  • 举报
回复
引用 2 楼 hch126163的回复:
function aaa(arr){ arr.length=0; arr.push(2); arr.push(3); } var arr=[1,2]; alert(arr); aaa(arr); alert(arr);
你这个是事先知道有1个元素,才直接对第2 3个元素进行赋值的吧
hch126163 2015-10-10
  • 打赏
  • 举报
回复
function aaa(arr){ arr.length=0; arr.push(2); arr.push(3); } var arr=[1,2]; alert(arr); aaa(arr); alert(arr);
zpjshiwo77 2015-10-10
  • 打赏
  • 举报
回复
不一样的,去好好理解JS的作用域吧,给篇博客你看看: http://www.cnblogs.com/wangfupeng1988/p/3991151.html
鸣鸣Amadues 2015-10-10
  • 打赏
  • 举报
回复
引用 12 楼 jslang 的回复:
用#2楼的方法就可以
对的,其实跟作用域什么的都没关系。 主要是我清空用了new Array(),这样就是另外一个对象了,应该用.length = 0清空。
天际的海浪 2015-10-10
  • 打赏
  • 举报
回复
引用 10 楼 Raffin 的回复:
[quote=引用 8 楼 天际的海浪的回复:]js是“引用传递”,不同于其它语言的“指针(地址传递)”。“引用”只有在读取时生效,写入时不会生效。 就是说,你只能在函数中修改数组的属性,不能对数组变量重新赋值,一但对变量重新赋值会断开与原数组的引用,而指向一个新的对象。
那我希望传进来数组改好值后传出去,应该怎么写?[/quote] 用#2楼的方法就可以
鸣鸣Amadues 2015-10-10
  • 打赏
  • 举报
回复
引用 9 楼 KK3K2005的回复:
我想知道 你的 形参 是指什么 为什么能清空
我希望,一个数组传入function,可以清空原来的元素,重新赋予新的元素,然后传回去,应该怎么实现?
鸣鸣Amadues 2015-10-10
  • 打赏
  • 举报
回复
引用 8 楼 天际的海浪的回复:
js是“引用传递”,不同于其它语言的“指针(地址传递)”。“引用”只有在读取时生效,写入时不会生效。 就是说,你只能在函数中修改数组的属性,不能对数组变量重新赋值,一但对变量重新赋值会断开与原数组的引用,而指向一个新的对象。
那我希望传进来数组改好值后传出去,应该怎么写?
KK3K2005 2015-10-10
  • 打赏
  • 举报
回复
我想知道 你的 形参 是指什么 为什么能清空
天际的海浪 2015-10-10
  • 打赏
  • 举报
回复
js是“引用传递”,不同于其它语言的“指针(地址传递)”。“引用”只有在读取时生效,写入时不会生效。 就是说,你只能在函数中修改数组的属性,不能对数组变量重新赋值,一但对变量重新赋值会断开与原数组的引用,而指向一个新的对象。
test2500 2015-10-10
  • 打赏
  • 举报
回复
进入function内形参的值就是外面实参地址副本,指向同一个地址,对其操作可以影响实参, 但是形参只要被赋值,就没有指向实参地址了吧。 http://blog.csdn.net/lijinlin/article/details/6167565
鸣鸣Amadues 2015-10-10
  • 打赏
  • 举报
回复
引用 1 楼 zpjshiwo77 的回复:
不一样的,去好好理解JS的作用域吧,给篇博客你看看: http://www.cnblogs.com/wangfupeng1988/p/3991151.html
这跟作用域没什么关系吧,我这个数组不是局部变量,而是方法参数。
test2500 2015-10-10
  • 打赏
  • 举报
回复
没看懂……

87,888

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧