js函数参数--都是按值传递

es中所有函数的参数都是按值传递。

基本类型值的传递和基本类型变量复制一样,引用类型传递如同引用类型变量的复制一样。

在向参数传递基本类型的值的时候,被传递的值会被复制给一个局部变量,也就是我们的arguments;
 

function add(num){

    num += 10;

    return num;

}

var count = 20;

var result = add(count);

alert(count);//20

alert(result);//30

函数add的参数num是函数内部的局部变量,变量count的值20被复制给参数num,num和count没有任何关联,仅仅只是值相同。

在向参数传递引用类型的值的时候,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。

function setName(obj){
    obj.name = "Nicholas";
}
var person = new Object();
setName(person);
alert(person.name);//Nicholas

变量person里面保存了新创建的对象,调用函数的时候,person被传递到setName之后就被复制给了obj。obj和person引用的是同一个对象。即使这个变量是按值传递的,obj也会按引用来访问同一个对象,person指向的对象在堆内存中只有一个,而且是全局对象。

function setName(obj){
    obj.name = "Nicholas";
    obj = new Object();
    obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"

我在控制台运行了这段代码,是弹出了"Nicholas"。

如果person是按引用传递的,那么person就会自动被修改为指向其name为"Greg"的新对象。实际上当在函数内部重写obj时,这个变量引用的就是一个局部对象。

函数内部  obj = new Object();是把这个局部变量指向了新的对象,然后赋值"Greg",是这个意思吧。

上面是<JavaScript高级程序设计>说的,我其实还是有点不明白,那句“即使这个变量是按值传递的,obj也会按引用来访问同一个对象”是什么意思。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值