【发布时间】:2012-07-07 13:06:40
【问题描述】:
-
问题是为什么要调试成函数,我们怎么知道函数引用的闭包内容?
我知道谷歌浏览器会在“作用域变量”部分显示一个闭包,但是其他浏览器呢? (更新:FF 也有类似的东西,但不叫它“闭包”,就像局部变量一样)
-
第一个问题的动机实际上是在阅读
- 附录 A 时出现的。 在第 355 页,作者说由于循环引用(单击处理程序引用具有 DOM 按钮的闭包内容),以下代码片段将导致 IE 内存泄漏。
我只是好奇是否通过调试到闭包内容的点击处理程序是这种情况。但是谷歌浏览器没有显示任何闭包变量。
因此我想知道作者如何知道循环引用问题..
$(document).ready(function() {
var button = document.getElementById('button-1');
button.onclick = function() {
$.print('hello');
return false;
};
});
谢谢。
【问题讨论】:
-
作者知道是因为(在这种情况下)很明显:变量“button”指的是一个DOM节点,并且它的“onclick”属性设置为一个函数,而该函数的变量在它的范围。
-
等等,这不是只有在处理程序实际引用按钮时才会出现问题吗?这是正确的例子吗?
-
@Pointy 我的好奇实际上是
onclick处理函数没有对变量button的任何引用。因此,变量button可以如何关闭该函数?否则我的想法是不是很不正确? -
如果你在
$.print行打断,你就不能在那里设置任何闭包变量。 (在谷歌浏览器中)
标签: javascript jquery closures