首页 新闻 会员 周边

JS 函数 数组传参,是形参还是实参~本人写了例子,请教问题

0
悬赏园豆:10 [待解决问题]

例子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;

}

 

 

 

js
Lasthelloworld的主页 Lasthelloworld | 初学一级 | 园豆:92
提问于:2016-09-06 22:39
< >
分享
所有回答(4)
0

首先,

形参 是 函数定义时使用的参数

实参 是 函数被调用时传递给函数的参数

至于你的例子,其实是另一件事,参数在传递给函数时,会将参数拷贝一份然后传递给函数(赋值时也一样都是拷贝一份),也就是说,调用者 与 被调用者 使用的是不同的值

至于为什么 传递对象过去,函数体内的可以改变对象并且影响到外部。那是因为,你得到的对象只是一块内存地址

 

长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-09-07 08:30
0

感觉好像你还没弄明白形参实参什么意思。。。

你的问题不在这儿。。。

顾晓北 | 园豆:10844 (专家六级) | 2016-09-07 09:07

形参和实参是知道的,实参是传递地址,形参只是把值传递进去,

只是发现C#和js有些区别,

个人对js这边不是很熟悉,假如能改值,js中的数组应该是对象了

支持(0) 反对(0) Lasthelloworld | 园豆:92 (初学一级) | 2016-09-07 09:45

@Lasthelloworld: 理解错了。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-09-07 09:49
0

c#中,数组是引用类型,改值后会对实参造成影响

小小高 | 园豆:1095 (小虾三级) | 2016-09-07 09:20

js中改值也不行。。。要用你的第2种方法

支持(0) 反对(0) 小小高 | 园豆:1095 (小虾三级) | 2016-09-07 09:22

支持(0) 反对(0) 小小高 | 园豆:1095 (小虾三级) | 2016-09-07 09:23
0

这涉及到传值与传址的问题

安得浮生半日闲 | 园豆:282 (菜鸟二级) | 2016-09-07 14:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册