javascript---传参:不能传递引用类型

本文深入探讨了函数参数的两种传递方式:按值传递与按引用传递。解释了基本类型与引用类型在函数调用中如何影响外部变量,并通过具体示例展示了参数传递的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结:

• 按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。

• 按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。

 



1.传递基本类型的值

    var box='lee';                    //传递基本类型的值,参数的值和外面的值无关
    function one(box){
        box=123;
    }
    one(box);
    alert(box);                //lee

解答:这个大家应该都懂,形参不影响实参。

2.传递引用类型(注意不是按引用类型传递)

1     var box=new Object();            //传递引用类型,不是按引用传递,参数的值是地址
2     function one(box){
3         box.name='lee';
4         var box=new Object();
5         box.name='kkk'
6     }
7     one(box)                
8     alert(box.name);        //lee

解答:这里大家可能有疑惑,为什么不是kkk。首先,函数参数是引用类型则传递其地址,即是副本,都是指向同一个值,只是地址不同,然后再在顺着地址找到其值。第3行,添加了name属性,第4行
new了一个对象,此时box指向新的值,此时赋值kkk不再会影响原来的函数外的box值,因为地址指向的值都不相同了。

注意:按引用传递的话,是将整个box对象传递进去,已经不是副本,执行第4行,之前的box值会被覆盖掉,并且box.name='kkk'了。

 

 

 

 结论:对于数字、字符串等是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量。
 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组)的地址。
 当函数改变这个地址指向的对象(数组)的内容时,同时也改变了函数外部变量指向的对象(数组)的内容;当函数改变的是变量的地址时,
 实际就与函数外部的变量失去了联系,变成了完全不同的对象了,不会对函数外部对象造成改变。
 
 
 基本类型值传递的是值,直接访问栈的值
 引用类型传递的是地址,如果在函数内的地址未被改变,则实参会随函数的执行改变而改变;如果地址改变了,则不再与实参有关

 

转载于:https://www.cnblogs.com/GacentJohn/p/5299005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值