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

What happens when a local variable is assigned to global object?

本文关键字:什么情况 对象 局部变量 分配 全局      更新时间:2023-09-26

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

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

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

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

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

相关文章: