将局部变量分配给全局对象时会发生什么?

时间:2013-01-29 03:59:25

标签: javascript

请忽略这可以在没有变量的情况下重写。这只是一个简单的例子。

window.onload = function() {
    var a = document.body, b = function() {console.log(1)};
    a.onkeydown = b;
};

我知道会发生什么:它有效。但是如何?

如果b是全局变量,则解释器会存储对它的引用。在这个例子中,当局部变量被销毁时,解释器是否存储对局部变量的引用,只是为了替换它,我假设是函数的副本?或者是对局部变量的引用仍然存储在幕后的某个地方,然后重新用作?

1 个答案:

答案 0 :(得分:4)

函数(和其他对象)总是通过引用传递。 b不包含该函数,而是指向它。分配a.onkeydown = b时,您将a.onkeydown指向同一个函数对象。然后函数结束,因此本地b变量被销毁但它指向的函数仍然存在 - 只有在没有其他任何指向它的情况下它才被垃圾收集器删除。