在C/C++中,我知道我们有指向对象和数组的指针,所以它们可以传递到函数参数中,而不需要克隆这些对象和数组。在Javascript中没有这样的选项,所以我们只使用object变量。
这是一个很好的实践吗?
function setWhite(obj){
obj.color = "white";
}
var shirt = {
color: "red",
size: "L"
}
setWhite(shirt);
console.log(shirt);
发布于 2018-10-19 03:30:33
是。在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函数的代码中使用更新值时,您的对象可能还没有更新值。
同样,如果您调用异步函数,但不等待它,然后更改传入的对象,则当异步函数使用该对象的值时,这些值可能与您调用它时的预期值不同。
https://stackoverflow.com/questions/52881171
复制相似问题