javascript函数的参数都是按值传递的

1327066-20181106144937107-2098161673.png

js高程里面有这么一句话

zhihu上面有人给出的比较好的解释,整理如下:

https://www.zhihu.com/question/51018162

简单类型(字符串,数字)1.值传递 2. 引用传递

复杂类型
1、将参数的值完全复制一份,按值传递
2、将参数的地址复制一份,按值传递地址,即引用复制(reference-copy)传递
3、对于参数的完全引用传递(c# 中的 ref 关键字、php 中的 & 等等。)

原因是复杂类型会在内存中占据一定的空间,而变量的值实际上是该空间的内存地址;在进行参数传递的时候,是将 dict1 的地址值复制了一份传给 dict。这样在修改该复杂对象(这里是一个字典)的成员的时候,因为 dict 和 dict1 指向内存的同一个空间,因此对于dict的成员的修改是直接作用在这个内存空间上,dict1的成员值自然也就随之变化了。但如果对 dict 重新赋一个字典变量,会在内存里开一个新的空间用于存储新的字典,同时将该空间的地址赋给 dict,但 dict1 的地址值不变,还是指向旧的字典,两个变量之间的联系就被切断了。

原因是 ref 方式传递是 dict1 本身,按地址传递,属于引用,与第2点的区别就是没有将地址复制一份再进行传递。

var a = [1, 2];

var change = function(arr) {
  arr.push(3)
  return arr;
};

console.log(change(a));
console.log(a);
var a = [1, 2];

var change = function(arr) {
  arr = [2, 3];
  return arr;
};

console.log(change(a));
console.log(a);

转载于:https://www.cnblogs.com/wynnzen/p/9915233.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值