Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个变量仍然存在?_Javascript_Variables_Object - Fatal编程技术网

Javascript 为什么这个变量仍然存在?

Javascript 为什么这个变量仍然存在?,javascript,variables,object,Javascript,Variables,Object,我有以下源代码 testObj = {} function testFun() { this.name = "hi"; } function test () { var instanceOfTestFun = new testFun(); testObj.pointerToFun = instanceOfTestFun; instanceOfTestFun = null; console.log(testObj); } $(docum

我有以下源代码

testObj = {}

function testFun()
{
    this.name = "hi";   
}

function test () {

    var instanceOfTestFun = new testFun();

    testObj.pointerToFun = instanceOfTestFun;

    instanceOfTestFun = null;

    console.log(testObj);

}

$(document).ready(test);
我希望看到testObj的控制台输出为“null”,但我看到了testFun函数。我认为javascript对对象使用“passbyref”


请…告诉我…

testObj。指针tofun
instanceOfTestFun
是对同一对象的两个引用


当您写入
instanceOfTestFun=null
时,您正在将
instanceOfTestFun
更改为不指向任何内容。
这不会影响仍然引用原始对象的
testObj.pointerToFun

如果更改原始对象(例如,
instanceOfTestFun.name=“bye”
),您将通过两个访问器看到更改,因为它们都指向(现在已更改)对象

上行将创建一个对象,并在变量
x
中存储对该对象的引用

var y = x;
上行将引用从变量
x
复制到变量
y
。现在,
x
y
都保存对对象的引用

x = null;
上行将删除存储在
x
中的引用。此引用引用的对象未被垃圾收集,因为变量
y
仍保留对它的引用


任何给定的对象只要被至少一个引用引用就可以生存。

如果将包含对其引用的属性(
instanceOfTestFun
)设置为
null
,则不会破坏对象本身。您只能通过删除对对象的最后一个引用(即此时由
testObj.pointerToFun
持有的值)来间接销毁对象,因此它将被垃圾收集

在任何情况下,您都不能删除
testObj
的属性而不引用它


不要将属性(
instanceOfTestFun
testObj
testObj.pointerToFun
)与它们可以保存的值混淆(引用属性,如
testObj.pointerToFun=instanceOfTestFun
,或普通值,如
9
null
).

这不是引用传递的意思。
instanceOfTestFun=null-这将删除对对象的引用,而不是对象本身。该对象仍然被另一个引用引用-
testObj.pointerToFun
,因此不会被垃圾收集。“我希望看到‘null’…,但我看到了testFun函数”是吗?你不应该看到任何功能。它现在更有意义了…我很感激!西蒙·维达斯//又是你!!!我记得你在我其他问题中的回答!!总是很有帮助!!!!!谢谢你!!!
x = null;