Javascript 在函数中创建jQuery对象而不使用它是否会导致内存泄漏?
例如:Javascript 在函数中创建jQuery对象而不使用它是否会导致内存泄漏?,javascript,jquery,html,angularjs,Javascript,Jquery,Html,Angularjs,例如: function getTimeFromMin(min) { var tempTime = new Date(); tempTime.setHours(0, min, 0, 0); return angular.element('<input type="hidden"/>').timepicker('setTime', tempTime).val(); } 函数getTimeFromMin(min){ var testime=新日期(); 设置小时
function getTimeFromMin(min) {
var tempTime = new Date();
tempTime.setHours(0, min, 0, 0);
return angular.element('<input type="hidden"/>').timepicker('setTime', tempTime).val();
}
函数getTimeFromMin(min){
var testime=新日期();
设置小时数(0,分钟,0,0);
返回angular.element(“”).timepicker('setTime',testime).val();
}
我只得到了值,但创建的元素会发生什么变化?它是被收集的还是我应该删除元素并分别返回val()?到今天为止的答案是肯定的,您的函数很可能会泄漏内存,但这完全取决于
计时器
函数的功能。在这个回答中,我假设它是一个jqueryui风格的小部件,这意味着它使用jQuery.prototype.data
存储一个对象
由于旧浏览器中存在垃圾收集问题,存储此数据的实际对象不是元素本身,而是一个单独的对象。通过引用该对象中与jQuery创建的元素上的expando属性相对应的属性来检索数据。为了避免内存泄漏,您需要对已创建的元素调用.remove
函数,以便删除我前面提到的对象中的数据缓存
基本上,将代码更改为:
var tmp = angular.element('<input type="hidden"/>').timepicker('setTime', tempTime),
val = tmp.val();
tmp.remove();
return val;
var tmp=angular.element(“”).timepicker('setTime',testime),
val=tmp.val();
tmp.remove();
返回val;
在jQuery的未来版本(3.X及更高版本)中,这个答案可能是无效的。我相信他们正在考虑将来直接将数据附加到DOM元素,因为较新的浏览器不像较旧的浏览器那样具有垃圾收集。或者,一旦EcmaScript 6获得了广泛的浏览器支持,他们可能会开始使用
WeakMap
作为对象存储,但在相当长的一段时间内,不要期望这样做。如果小部件构建正确,您可以销毁它。