我想我错过了关于 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' 事件使用。click 事件也附加在匿名函数中。
然后我调用'test()',从按钮取消订阅'click'事件并再次调用'test()'。结果,我收到了预期的 local=12 和 local anonymous=13 。
但是我不明白 javascript 在内存中的作用,尤其是在每个步骤中的函数 'y()' 和匿名函数。
我的具体问题如下,但如果你能解释整个流程,我将非常感激。
所以当我分离所有引用第一个'obj.test()'的事件时。在这种情况下,我猜这只是“点击”事件。javascript 会破坏 'obj.test()' 范围和包括匿名函数范围的所有函数吗?我需要关心其他事情吗?
我的用例:我正在创建具有不同页面行为的动态页面加载,所以我想在全局对象方法中为每个页面分离 javascript,一旦加载了新页面,我想分离前一页的所有事件并调用行为函数。但突然间我意识到我并不真正了解 javascript 是如何工作的,而且这种方法可能会导致非常大的内存泄漏。:--)
非常感谢!