例子1:
数组传入函数,函数中加入一个元素,外部数据相应改变。
例子2:
数组传入函数,函数中给数组重新赋值,外部数组未改变。
例子3:
C#中对应的,结果a依然是3,4
js中array typeof 结果也是object.
这里是为了再写递归的时候方便些,所以探究这个:
例如:
//假如数组当实参,递归可以写作
var list =[];
function t(list){
if(list.length<5){
list.push(1);
t(list);
}
}
//假如不能当做实参
var list =[];
list = t([]);
function t(arr){
if(arr.length<5){
arr.push(1);
return t(arr);
}
return arr;
}
首先,
形参 是 函数定义时使用的参数
实参 是 函数被调用时传递给函数的参数
至于你的例子,其实是另一件事,参数在传递给函数时,会将参数拷贝一份然后传递给函数(赋值时也一样都是拷贝一份),也就是说,调用者 与 被调用者 使用的是不同的值。
至于为什么 传递对象过去,函数体内的可以改变对象并且影响到外部。那是因为,你得到的对象只是一块内存地址。
感觉好像你还没弄明白形参实参什么意思。。。
你的问题不在这儿。。。
形参和实参是知道的,实参是传递地址,形参只是把值传递进去,
只是发现C#和js有些区别,
个人对js这边不是很熟悉,假如能改值,js中的数组应该是对象了
@Lasthelloworld: 理解错了。。。
c#中,数组是引用类型,改值后会对实参造成影响
js中改值也不行。。。要用你的第2种方法
这涉及到传值与传址的问题