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

来源:互联网 发布:js防水涂料施工工艺 编辑:程序博客网 时间:2024/06/06 01:21

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

<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>

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

0 0
原创粉丝点击