我认为我在 JavaScript 方面缺少非常重要的东西。
var gl = 10
$(document).ready(function() {
var obj = {}
obj.test = function() {
gl++
var lc = gl
function y() {
alert('local = ' + lc)
}
(function() {
var k = lc + 1
$('#button').click(function() {
alert('local anonymous = ' + k)
y()
})
})();
}
obj.test()
$('#button').off()
obj.test()
})
在上面的场景中,我定义了一个对象'obj'并为该对象创建了一个方法'test'。在该方法内部,我有一个本地函数'y()',它被附加到按钮的'click'事件中使用。同时,点击事件在匿名函数中被附加。
然后我调用了'test()',取消订阅了按钮的'click'事件,并再次调用了'test()'。结果得到了预期的本地变量等于12和本地匿名变量等于13。
但是我不理解JavaScript在内存中的操作,尤其是在每个步骤中对函数'y()'和匿名函数的操作。
我的具体问题如下,但如果您能解释整个流程,我将非常感激。
那么,当我分离了所有引用第一个'obj.test()'的事件时,例如仅'click'事件。在这种情况下,我猜测JavaScript会销毁'obj.test()'范围和所有函数,包括匿名函数的范围。我需要关心其他方面吗?
我的用例:我正在创建动态页面加载,具有不同的页面行为,因此我希望将每个页面的JavaScript分开放置在全局对象方法中,并且一旦加载新页面,我想分离前一页的所有事件并调用行为函数。但是突然间我意识到我真的不了解JavaScript的工作方式,这种方法可能会导致非常严重的内存泄漏。 :--)
非常感谢!