Javascript-释放一个记忆函数

Javascript-释放一个记忆函数,javascript,garbage-collection,Javascript,Garbage Collection,我必须说,我不知道正确的术语,所以请原谅我的一些错误。 我有的是一张有行的桌子。表中最后一行的最后一个可编辑列使用TabKey启用,TabKey会自动创建新行 function enableTab() { lastEditable = currentTable .find("tr") .find('textarea, .cleanbox-editable-cell') .not(function(index, element) { return $(e

我必须说,我不知道正确的术语,所以请原谅我的一些错误。 我有的是一张有行的桌子。表中最后一行的最后一个可编辑列使用TabKey启用,TabKey会自动创建新行

function enableTab() {
  lastEditable = currentTable
    .find("tr")
    .find('textarea, .cleanbox-editable-cell')
    .not(function(index, element) {
        return $(element).parent().css("display") == "none";
    })
    .last();

  lastEditable.unbind("keydown");
  lastEditable.keydown(function(e) {
    var keyCode = e.keyCode || e.which;

    createNewRow();
  };
};

function createNewRow() {
  createRow();
  enableTab();
}
创建新行时,将重新计算lastEditable变量。 我希望lastEditable仅与最后一行的最后一列相关联。无论如何,当我只希望新行能够执行这样的功能时,会创建一个新行,并为新行和上一行的最后一列提供创建新行的功能

因此,在我看来,每次创建新行时,变量lastEditable都正确地关联到新行的最后一列。但是之前与同一变量关联的对象的函数没有被删除:它不再有名称

我说得对吗?如何删除对象

我尝试了以下方法,但无效:

lastEditable.keydown(function(e) {
    var keyCode = e.keyCode || e.which;

    delete lastEditable;
    createNewRow();
};

您正在解除事件处理程序的绑定,然后立即将同一事件处理程序重新应用于同一元素。您需要重新组织代码,以便在创建新行时将事件处理程序绑定到新元素


为了改进这篇可能对其他人有用的文章,研究Lee的代码,我解决了我的问题,只需将lastEditable.unbind(“keydown”)移动到.keydown(函数(e){}),如下所示:

function enableTab() {
  lastEditable = currentTable
    .find("tr")
    .find('textarea, .cleanbox-editable-cell')
    .not(function(index, element) {
        return $(element).parent().css("display") == "none";
    })
    .last();

  lastEditable.keydown(function(e) {
    var keyCode = e.keyCode || e.which;

    lastEditable.unbind("keydown");
    createNewRow();
  };
};

function createNewRow() {
  createRow();
  enableTab();
}
function enableTab() {
  lastEditable = currentTable
    .find("tr")
    .find('textarea, .cleanbox-editable-cell')
    .not(function(index, element) {
        return $(element).parent().css("display") == "none";
    })
    .last();

  lastEditable.keydown(function(e) {
    var keyCode = e.keyCode || e.which;

    lastEditable.unbind("keydown");
    createNewRow();
  };
};

function createNewRow() {
  createRow();
  enableTab();
}