3

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

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

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

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

4

1 回答 1

4

函数(和其他对象)总是通过引用传递。b不包含函数,而是指向它。当您分配时a.onkeydown = b,您a.onkeydown指向的是同一个函数对象。然后函数结束,因此局部b变量被销毁但它指向的函数仍然存在 - 如果没有其他东西指向它,它只会被垃圾收集器删除。

于 2013-01-29T04:03:30.273 回答