JavaScript中函数传入参数与外部变量绑定

最近在实现一些功能的时候,写了如下代码:

<span style="font-size:14px;">var nums = [1,2,3];
function collect(nums){
	nums = [2,3,4,5];
}
collect(nums);
alert(nums);</span>

我们所希冀的,按第一直觉,当然是希望alert出来的nums是[2,3,4,5]这个数组的内容。

但是非常抱歉,结果却是:

  //1,2,3


这是为什么呢?

当我将代码写成这样:

<span style="font-size:14px;">var nums = [1,2,3];
function collect(nums){
	nums = [2,3,4,5];
}
nums = collect(nums);
alert(nums);</span>

就一点问题都没有了。


显而易见,问题就出现在所传入的nums中。

为什么经过了一段处理之后,我们传入的nums不能改变呢?

nums是一个数组,是一个对象,它所传入的应该是实参啊?为什么会修改不了呢?

各位看官,看到这里,请别急。

请你回想一下:为什么我们给函数传入的对象,能够被我们在函数内部改变呢?


因为我们所传入的变量,实际上只是对象的指针啊!

当我们调用这个指针修改对象的内容的时候,对象的内容当然能够被修改。

但是如果我们是直接给这个变量重新赋予一个新的数组、新的对象(如代码段1所示),变量与原来对象的联系就被割断了,于是就无法再获取到原来的对象了。

因此,我们千万不能用如下方式在函数内部修改对象:

<span style="font-size:14px;">nums = [2,3,4,5];</span>

如果确实需要在函数内部对变量重新赋值,请在原来基础上进行增加再删除的操作,或者为函数返回一个新的对象,用源对象接收,完成修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值