在JavaScript中对变量的多个引用

时间:2015-12-17 21:14:58

标签: javascript pointers reference

变量是否可以作为另一个变量的引用?我可以使用倍数变量来保存有关单个数据的相同信息吗?

例如:

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中模仿这种行为?

4 个答案:

答案 0 :(得分:3)

在JavaScript中,以对象作为其值的变量实际上是对象的标量引用(指针),因此赋值只是复制对象引用,而不是对象本身。所以当你这样做时

var bar = foo;

复制foo的值。这意味着foobar都具有相同值的副本

即使有了对象,这也不会起作用

var x = {};
var y = x; // y and x both point to the same object
x = null;
// y still points to the object

同样,xy是引用的副本,因此xy都是单独的引用,每个引用都具有相同的值。但是将一个归零可以做另一个。

你能得到的最接近的是@Derek朕会功夫所说的,这是做什么的

var x = {val: 'data'};
var y = x;
delete x.val;
// y.val is now undefined 

并传递xy

答案 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