如何避免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>
相关文档:
parseFloat 转换成浮点数
parseInt 转换成整数.
这两个函数都有些容错性的,比如"123abc"会变成123.
如果楼主希望更准确一些,其实可以判断一下,然后用eval,像这样
不过也可以使用这样的方法:
var a = "234" ;
a = a.replace(/(^[\\s]*)|([\\s]*$)/g, "");
if( a !="" && !isNaN( a ) )
{//如果是数字
a = e ......
今天头儿复查代码,结果发现有的页面并没有相应的DOM元素,导致调用fuction出错。采用JavaScript中arguments对象可以很轻松的解决这个问题,而不需要再去判断元素之类的。so Good!
JavaScript中arguments函数对象是该对象代表正在执行的函数和调用它的函数的参数。使用方法:
[function.]arguments[n ]
其中function是 ......
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>构造函数创建对象 ......
在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。
在JavaScript中,Double类型和Int类型都是看作为 ......
1.不过我教你一个学做网页的技巧
每看到一个漂亮的网页就查看下代码
2.看张孝祥的视频
3。从基础学起。然后学些基本的WEB开发应用
推荐一个网站http://www.ccscript.cn/
该站详细分类JS的基础,对象,极其应用;
该站有多种当今流行的JS框架;
站内主打Jquery框架的基础及应用;
包括特效代码和展示特效; ......