为什么这个变量还活着?

Moo*_*oon 4 javascript variables object

我有以下源代码.

testObj = {}

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

function test () {

    var instanceOfTestFun = new testFun();

    testObj.pointerToFun = instanceOfTestFun;

    instanceOfTestFun = null;

    console.log(testObj);

}

$(document).ready(test);
Run Code Online (Sandbox Code Playgroud)

我希望testObj的控制台输出看到'null' ,但我看到了testFun函数.我认为javascript使用'pass by ref'来表示对象.

请建议我...

SLa*_*aks 7

testObj.pointerToFun并且instanceOfTestFun是对同一对象的两个引用.

当你写作时instanceOfTestFun = null,你会改变instanceOfTestFun为指向任何东西.
这不影响testObj.pointerToFun,仍然是指原始对象.

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