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

标签 javascript

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

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/

相关文章:

javascript - () => className 在 Javascript ES6 中意味着什么?

javascript - 如何组织我的网站的自定义实用 JS 功能

javascript - 在按下或更改事件时,触发 Ajax 以在 jQuery 中发送数据

javascript - ngFor中如何绑定(bind)一个输入框

javascript - JSON.stringify反转?

javascript - 单击按钮后尝试删除输入并了解为什么在控制台中数组未更新

javascript - 在文本区域字段中设置焦点和突出显示

javascript - 使用 CSS 或 JavaScript 从原色动态获取强调色

javascript - Bootstrap-datepicker 不显示

javascript - 在 React-Native 中将 props 作为 ref 和方法传递给子级或同级