并不真地...
// make a global variable
var a = [1,2,3];
// Assign it to something
var someObj = { value: a };
someObj.value; // [1,2,3];
// set a new value for the global
a = [];
a; // []
someObj.value; // [1,2,3];
这是您提到的初始代码。您可以更改全局变量指向的对象,但不能更改对要替换的对象的其他引用。
你的第二个例子也存在同样的问题:
// make a global variable
var globals = { a: [1,2,3] };
// Assign it to something
var someObj = { value: globals.a };
someObj.value; // [1,2,3];
// set a new value for the global
globals.a = [];
globals.a; // []
someObj.value; // [1,2,3];
globals
如果要更新引用,则必须引用容器对象。那是其他对象持有对容器的引用,然后您可以更改该容器的内容。
// make a global variable
var globals = { a: [1,2,3] };
// assign a reference to the container in another object.
var someObj = { globals: globals };
someObj.globals.a; // [1,2,3];
// set a new value for the global
globals.a = [];
globals.a; // []
someObj.globals.a; // [];
认为这可能会有点笨拙。
您还可以通过全局更改对象引用,而不是替换它。
var a = [1,2,3];
var b = a; // a and b now reference the same object.
a.splice(0); // remove all items from this array, without replace the array object.
a; // [];
b; // [];
// a and b now still point to the same array, which is now empty.