将对象作为参数传递给Javascript中的参数

时间:2018-10-18 19:25:20

标签: javascript javascript-objects

在C / C ++中,我知道我们有指向对象和数组的指针,因此可以将它们传递到函数参数中,而无需克隆所述对象和数组。在Javascript中,没有这样的选项,因此我们只使用object变量。

这是好习惯吗?

function setWhite(obj){
  obj.color = "white";
}

var shirt = {
  color: "red",
  size: "L"
}

setWhite(shirt);

console.log(shirt);

1 个答案:

答案 0 :(得分:1)

是的。在javascript中,对象是通过引用传递的。因此,如果您在函数内更改对象的值,它将在函数外更改它。

但是,如果您执行了以下操作,则情况并非如此:

function setWhite(obj){
  obj = {
    color: "white",
    size: "M"
  }
}

var shirt = {
  color: "red",
  size: "L"
}

setWhite(shirt);

console.log(shirt); // shirt will remain red / L

请注意,不同之处在于我正在obj方法内重新分配setWhite(),因此原始obj丢失了该功能。

这是一个很重要的概念,因为如果您不理会它,可能会造成令人不安的意外后果,不小心更改了您不想更改的对象的值,只是暂时操纵了其他数据目的。当您开始使用异步功能时,请务必记住这一点。异步功能在后台发生,您必须指定何时“等待”它们。如果您调用一个异步函数期望它更改您的对象值,但不等待它,则当您稍后在调用异步函数的代码中使用它们时,您的对象可能还没有更新的值。

类似地,如果您调用异步函数但不等待它,然后又更改了传入的对象,那么当异步函数使用该对象的值时,它们可能与您不同打算在您调用它时使用。