Javascript:通过引用传递

Seb*_*iva 3 javascript pass-by-reference

有人可以在下面的代码中解释我,为什么当我做o = {}时,对象没有被重置?

var funky = function (o) {
    o.z = null;
    o.a = "aaa";        
    o = {};
};

var x = { z: "zzz"};
funky(x);

console.log(x);
Run Code Online (Sandbox Code Playgroud)

cHa*_*Hao 7

因为JavaScript没有通过引用传递.它按值传递引用.

差异很微妙,但很重要.它的要点是,对象变量的值不是对象; 它是对象的引用.传递变量会传递该引用的副本.有了它,您可以随意修改对象的内容,但不能以调用者可以看到的方式将其替换为整个其他对象.

  • 您可以通过传入对象并修改对象来"模拟"通过引用传递.但是,您无法重新分配对象.可以把它想象成传递一个指向可变对象的指针.您可以通过指针的成员修改对象,但不能重新指定指针并期望外部函数采用修改后的指针. (3认同)