Javascript将对象传递给函数

Chr*_*ris 6 javascript class

关于Javascript的快速问题我无法找到明确简洁的答案.

我正在构建一个远远超过我之前所做的任何应用程序的应用程序,并涉及实例化多个类.然后将这些对象传递到一个处理类,该类检查用户输入,绘制到画布并更新已传递的对象.

我想知道,JavaScript如何处理将对象传递给函数?我传递了对象的副本,还是我传递了对象的引用?

因此,如果我的控制器类改变了其中一个对象变量,那么它是在任何地方改变的,还是只在该控制器看到的对象中改变了?

对于这样一个简单的,可能很容易测试的问题,我很抱歉,但由于错误堆积,我甚至不确定我是否正确地制作了一个课程.

ta-*_*run 3

当传入字符串或数字等基本类型变量时,值是按 value传入的。这意味着在函数内对该变量的任何更改都与函数外部发生的任何更改完全分开。

function myfunction(x)
{
      // x is equal to 4
      x = 5;
      // x is now equal to 5
}

var x = 4;
alert(x); // x is equal to 4
myfunction(x); 
alert(x); // x is still equal to 4
Run Code Online (Sandbox Code Playgroud)

然而,传入一个对象是通过引用传入的。在这种情况下,该对象的任何属性都可以在函数内访问

function myobject()
{
    this.value = 5;
}
var o = new myobject();
alert(o.value); // o.value = 5
function objectchanger(fnc)
{
    fnc.value = 6;
}
objectchanger(o);
alert(o.value); // o.value is now equal to 6
Run Code Online (Sandbox Code Playgroud)

  • _“但在 javascript 中变量是通过引用传递的”_ - @lorenzo.marcon - 在 JS 中则相反。一切都是按值传递的,但对于对象来说,值是对该对象的引用。它不像其他一些语言中的“通过引用”,其中函数可以更改传入的变量。编辑:实际上我只是注意到您在答案中说了这么多,所以我认为这只是您评论中的一个拼写错误。 (2认同)