JavaScript函数参数通过引用存储

这个问题在这里已经有了答案:

  • Javascript的参考与价值[复制] 4个答案

  • 这里真正的问题是你没有改变任何东西; 你只是重新分配函数中的变量z 。 如果你传递了一个对象或者数组,它就没有什么区别。

    var x = ['test'];
    var y = function(z) {
        z=['foo'];
        return z;
    }
    y(x);
    x; // Still ['test']
    

    现在,别人所说的也是如此。 基元不能被突变 。 这实际上比听起来更有趣,因为下面的代码有效:

    > var x = 1;
    > x.foo = 'bar';
    "bar"
    > x
    1
    > x.foo
    undefined
    

    注意x.foo的赋值看起来是成功的,但是x.foo却无处可寻。 这是因为JavaScript很容易强制原始类型和对象类型(有基本对象的“对象”版本,即普通对象)。 在这种情况下,基元1被强制转换为新的对象( new Number(1) ),其foo属性被设置,然后立即销毁,因此不会产生持久效果。


    感谢@TeddHopp关于这个笔记:

    对于所有变量只传递值,而不仅仅是基元。 您不能通过将函数传递给函数来更改调用代码中的变量。 (当然,您可以更改可能传递的对象或数组;但是,调用代码中的变量本身保持不变。)

    如果你想要改变x的值,你可以这样做:

    x = y(x);
    
    链接地址: http://www.djcxy.com/p/20977.html

    上一篇: JavaScript function arguments store by reference

    下一篇: Is JavaScript pass