如何避免Javascript事件绑定出现内存泄漏
"These memory leaks often
occur as a result of circular references between JavaScript objects and
objects within IE’s DOM (document object model)."
GPDE Team Blog
明显的DOM对象与 JavaScript对象循环引用很好判断,难的是隐含的循环引用判断!
隐含的循环引用需要通过作用域链进行分析判断!
考虑以下代码(感谢可爱的winter ^_^):
var e=document.getElementBy??("XX");
e.onclick=function(){}
scopechain分析:
scopechain.e = document.getElementBy??("XX");
function f(){}
function f(){}.[[scope]] = scopechain
e.onclick = f
很清晰,对不对?
"Javascript绑定事件时,只要DOM的事件里访问不了DOM自己的那个变量就行了"
winter
"IE现在的Patch搞得有时候泄露有时候不泄露"
winter
<button id="testx">No Memory Leak Event Bind</button>
<button id="testy">No Memory Leak Event Bind</button>
<script type="text/javascript">
var fooA = function(){
var f = function(){alert(this+'\n'+fooA);}
!function(){
var d = document.getElementById('testx');
d.onclick = f;
}()
}
fooA();
var fooB = function(){
this.onclick = function(){alert(this+'\n'+fooB);}
}
fooB.call(document.getElementById('testy'));
</script>
相关文档:
FusionChart 就不用介绍了把,一款支持多种语言的图表生成控件,生成的图表丰富,美观,且有动态感,因为它生存的东西就是一个flash。一下介绍一下它的javascript 实现方式把。
废话少说,直接上实例
<HTML>
<HEAD>
<SCRIPT LANGUAGE="Javascri ......
<html>
<head>
<mce:script type="text/javascript"><!--
function myclick(event){
var ev =event.srcElement ? event.srcElement : event.target;
}
// --></mce:script>
......
1>工厂函数来创建对象(Factory)
function createCar(){
var obj = new Object;
obj.name = "BWM";
obj.show = function(){
alert(this.name);
}
return obj;
}
var car1 = createCar();
var car2 = createCar();
car1.show();
car2.show();
2>构造函数创建对象 ......
indexOf
返回元素在数组的索引,没有则返回-1。与string的indexOf方法差不多。
如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
Array.prototype.indexOf = function(el, start) {
var start = start || 0;
for ( var i=0; i < this.length; ++i ) {
......
1.不过我教你一个学做网页的技巧
每看到一个漂亮的网页就查看下代码
2.看张孝祥的视频
3。从基础学起。然后学些基本的WEB开发应用
推荐一个网站http://www.ccscript.cn/
该站详细分类JS的基础,对象,极其应用;
该站有多种当今流行的JS框架;
站内主打Jquery框架的基础及应用;
包括特效代码和展示特效; ......