JavaScript 匿名函数

标签 javascript jquery

我有以下代码:

for (var i=0; i < 20; i++) {
    var itemButton = $('<button />').click(function(){ alert('Hello'); }).append('Hello');
    $('#container').append(itemButton);                            
}

我在这里创建了很多按钮,每个按钮都有一个 onclick 函数。然后我使用 $('#shopSearchTopBar').empty(); 清除#container 并再次创建按钮。

我的问题是:这是否可能是内存泄漏?当我在#container 上调用 .empty() 方法时,Javascript 是否会释放我第一次创建的那些匿名函数所使用的内存,或者内存被释放,我可以安全地添加这 20 个新按钮,每个按钮都有自己的新匿名函数?

最佳答案

这些函数存储在 jQuery.cache 中。

只要您使用像 .empty() 这样的 jQuery 方法,所有受影响的元素的数据都会被清除。

如果你做了这样的事情:

document.getElementById('container').innerHTML = '';

那么您可能会遇到非常严重的内存泄漏,因为每个元素与 jQuery.cache 之间的连接将被切断,并且数据(可能还有更多)将孤立地存放在缓存中。

在删除/覆盖内容时坚持使用 jQuery 方法,你会没事的。

即使这样做:

$('#container').html('');

...jQuery 将清理受影响元素的数据。

关于JavaScript 匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4879686/

相关文章:

javascript - 如何将包含特定字符串的url添加到数组中?

javascript - 拉斐尔 - 悬停动画

javascript - excel 像 javascript 中的应用程序

php - ajax 响应的事件处理程序(多选下拉列表)

javascript - 以编程方式滚动外部网页以加载内容

javascript - 从下拉列表中选择数据时从 MYSQL 数据库设置输入字段值属性

javascript - 使用 raphael js 和 animate 一起创建一组路径

javascript - 为什么我的 Canvas 绘制图像没有显示在 Angular2 组件中

javascript - Heroku 中的 Node 应用程序 : Module build failed: Error: Unexpected "space" found

javascript - 如何在点击时播放关键帧动画?