众所周知,JavaScript中的所有内容都是按值传递的,即使是 Objects ,因为函数参数被视为对象的实际引用的传值。
我的问题是,我有可能访问一个Object,就像我可以修改它的属性一样 - 谈论作为参数传递给函数的对象,但我可以不重写对象本身?
这是一种有意识的机制来避免某些错误,还是只是设计缺陷或限制?如果它是故意想要实现的目标呢?能够重写对象本身有什么额外的好处以及可能发生的错误/错误类型?
我完全理解它是由对象引用的值传递引起的,但是我无法弄清楚是什么阻止我重写对象,我已经有了它的引用副本 - 和我也可以修改它。
示例:
var x = { arr: [1,2,3] };
var modify = function ( _x ) {
_x.arr.push(4);
}
var rewrite = function ( _x ) {
_x = { str: "X" };
// OR
_x = "X";
}
modify(x);
console.log( "X after modification: ", x );
rewrite(x);
console.log( "X after rewrite: ", x );
答案 0 :(得分:3)
在修改或重写方法内部,变量x和_x是对同一对象的引用。重写函数将_x变量更改为指向另一个对象。这不会更改仍然指向原始对象的x变量引用。
答案 1 :(得分:2)
您可以使用其他值覆盖引用,也可以更改引用的对象的属性。
JavaScript无法更改引用指向的位置。语法不存在,这就是你无法做到的原因。