请忽略这可以在没有变量的情况下重写。只是举个简单的例子。
window.onload = function() {
var a = document.body, b = function() {console.log(1)};
a.onkeydown = b;
};
我知道会发生什么:它起作用了。但是如何呢?
如果 b
是一个全局变量,解释器将存储对它的引用。在这个例子中,当局部变量被销毁时,解释器是否存储了对局部变量的引用,只是为了替换它,我假设是函数的副本?或者对局部变量的引用是否仍然存储在幕后的某个地方,然后重新调整用途?
最佳答案
函数(和其他对象)总是通过引用传递。 b
不包含该函数,而是指向它。当您分配 a.onkeydown = b
时,您使 a.onkeydown
指向同一个函数对象。然后函数结束,因此局部 b
变量被销毁,但它指向的函数仍然存在 - 只有当没有其他东西指向它时,它才会被垃圾收集器删除。
关于javascript - 将局部变量分配给全局对象时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14575429/