首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript中将对象作为参数传递到函数中

在Javascript中将对象作为参数传递到函数中
EN

Stack Overflow用户
提问于 2018-10-19 03:25:20
回答 1查看 5.8K关注 0票数 2

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

这是一个很好的实践吗?

代码语言:javascript
复制
function setWhite(obj){
  obj.color = "white";
}

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

setWhite(shirt);

console.log(shirt);

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 03:30:33

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

但是,如果您这样做,情况就不会是这样:

代码语言: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

请注意,不同之处在于我在setWhite()方法中重新分配了obj,因此该函数丢失了原始的obj。

这是一个需要理解的重要概念,因为它可能会产生令人不安和意想不到的后果,如果您忘记了它,意外地更改了您不想更改的对象的值,只是为了其他目的临时操作数据。当你开始使用异步函数时,记住这一点尤其重要。异步函数发生在后台,您必须指定何时“等待”它们。如果您调用异步函数时希望它更改您的对象值,但不要等待它,那么当您稍后在调用async函数的代码中使用更新值时,您的对象可能还没有更新值。

同样,如果您调用异步函数,但不等待它,然后更改传入的对象,则当异步函数使用该对象的值时,这些值可能与您调用它时的预期值不同。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52881171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档