将局部变量分配给全局对象时会发生什么情况
What happens when a local variable is assigned to global object?
请忽略这可以在没有变量的情况下重写。这只是举一个简单的例子。
window.onload = function() {
var a = document.body, b = function() {console.log(1)};
a.onkeydown = b;
};
我知道会发生什么:它有效。但是怎么做呢?
如果b
是一个全局变量,解释器将存储对它的引用。在这个例子中,解释器是否存储了对局部变量的引用,只是为了在局部变量被销毁时用我假设的函数副本替换它?还是对局部变量的引用仍然存储在幕后的某个地方,然后被重新利用?
函数(和其他对象)总是通过引用传递。 b
不包含该函数,而是指向该函数。当你赋值a.onkeydown = b
时,你a.onkeydown
指向同一个函数对象。然后函数结束,因此局部b
变量被销毁,但它指向的函数仍然存在 - 只有当没有其他东西指向它时,垃圾收集器才会删除它。
相关文章:
- 在什么情况下需要同时使用compile&链接函数的角度
- 克服错误的更优雅的方法是什么:需要对象说明符.当通过JXA通过Messages发送SMS时,参数没有对象说明符
- 在什么情况下,Array.observe的“add”事件会触发
- 用户单击带有哈希值的链接以访问该页面,如果禁用Javascript会发生什么情况
- 在什么情况下我们需要在javsacript中实现单例类
- 在什么情况下,应该.deep.equal失败,但使用JSON.stringify进行比较工作正常
- 在 301 重定向期间,Google Analytics cookie _ga会发生什么情况
- 什么's对象文字中带引号和不带引号的键之间的区别
- 当浏览器关闭时,运行Web Worker会发生什么情况
- 使用node.js模块,在什么情况下模块会被执行两次
- 更改 innerHTML 属性时处理程序会发生什么情况
- 如果在 JavaScript 中的 if 条件之后在执行块中使用两个等于而不是只有一个,会发生什么情况
- 如果取消对本地存储的写入,会发生什么情况
- 当您不再持有对 ES6-Promise 的引用时会发生什么情况
- 对垃圾收集的 HTTP 请求的 HTTP 响应会发生什么情况
- 更改对象的原型时会发生什么情况
- 如果工作线程发布消息时主线程繁忙,会发生什么情况
- 在什么情况下浏览器拒绝继续调用 setInterval 回调
- 将局部变量分配给全局对象时会发生什么情况
- 如果您包含三个版本的 jQuery,并在中间包含一个使用 jQuery $ 对象的脚本,会发生什么情况