请忽略这可以在没有变量的情况下重写。这只是一个简单的例子。
window.onload = function() {
var a = document.body, b = function() {console.log(1)};
a.onkeydown = b;
};
我知道会发生什么:它有效。但是如何?
如果b
是全局变量,则解释器会存储对它的引用。在这个例子中,当局部变量被销毁时,解释器是否存储对局部变量的引用,只是为了替换它,我假设是函数的副本?或者是对局部变量的引用仍然存储在幕后的某个地方,然后重新用作?
答案 0 :(得分:4)
函数(和其他对象)总是通过引用传递。 b
不包含该函数,而是指向它。分配a.onkeydown = b
时,您将a.onkeydown
指向同一个函数对象。然后函数结束,因此本地b
变量被销毁但它指向的函数仍然存在 - 只有在没有其他任何指向它的情况下它才被垃圾收集器删除。