var a = [1];
function f(a){
a[100] = 3;
a = [1,2,3];
}
f(a)
console.log(a);
... 逗一下 。下面严谨的回答
首先在a = [1, 2, 3] 这个步骤之前。这个形参a接受到的其实就是实参a的指针,如第一位同学说的,这个形参a你随便换都可以,这也是为什么叫形参的原因,只是一个接受者
a = [1, 2, 3]这个操作叫赋值操作,赋值操作按照值的类型给等号左边的变量分配一个新的地址(或者指针),因此这个时候a有一个新的指针了,不会再指向原来的数组。
你要好好学习一下作用域了!
1: 里面的a 指的是 function的 参数a, 相当于里面 var a = a;
2: 里面的a 改变身上的元素 是改变地址指向的数组, 所以共同改变
3: a = [xxx] 是把内部的a重写了, a已经不指向 外部的a了
Js中参数传递的方式是 值传递;
var a = [1]; // 声明引用类型时,变量a保存的是内存地址,这个地址里放入的才是数组[1],函数和对象同理;
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
3 回答804 阅读✓ 已解决
这是面向对象和形参的问题啦,js 里的数组也是对象。
一步一步的看:
如果你把
fn(a)
换成fn()
,结果就会和你期待的一样了。