变量是否可以作为另一个变量的引用?我可以使用倍数变量来保存有关单个数据的相同信息吗?
例如:
LRESULT CALLBACK RegisterWndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) {
switch (uMessage)
{
case WM_CREATE: {
break;
}
case WM_DESTROY:{
PostQuitMessage(0);
break;
}
default:{
DefWindowProc(hWnd, uMessage, wParam, lParam);
}
}
return 0;
}
在var foo = "data";
var bar = foo;
// I want this to set both foo & bar to null
foo = null;
console.log(bar); // However, bar is still set to "data"
或C
中,您可以通过指针获得所需的行为;有两个变量引用内存中的相同位置。
有没有办法在JavaScript中模仿这种行为?
答案 0 :(得分:3)
在JavaScript中,以对象作为其值的变量实际上是对象的标量引用(指针),因此赋值只是复制对象引用,而不是对象本身。所以当你这样做时
var bar = foo;
复制foo
的值。这意味着foo
和bar
都具有相同值的副本。
即使有了对象,这也不会起作用
var x = {};
var y = x; // y and x both point to the same object
x = null;
// y still points to the object
同样,x
和y
是引用的副本,因此x
和y
都是单独的引用,每个引用都具有相同的值。但是将一个归零可以做另一个。
你能得到的最接近的是@Derek朕会功夫所说的,这是做什么的
var x = {val: 'data'};
var y = x;
delete x.val;
// y.val is now undefined
并传递x
或y
。
答案 1 :(得分:2)
是。八九不离十。对象引用类似于C:
中的指针var foo = {value: "data"};
var bar = foo;
foo.value = undefined;
console.log("Value: %s", bar.value); // undefined
答案 2 :(得分:1)
不,你不能。如果值是基元,则复制该值,如果它是对象,则复制引用。
您唯一能做的就是将多个变量指向同一个对象。但是,重新分配任一变量都不会重新分配另一个变量。
答案 3 :(得分:0)
这是因为JavaScript中的变量类型不同:原语和引用。看看这篇文章,原始类型和参考类型部分很好地解释了https://www.safaribooksonline.com/library/view/javascript-the-definitive/0596101996/ch04.html