使用闭包避免全局污染

1
2
3
4
5
6
7
8
9
10
var obj = (function(){
var a=2;
return function(){
a++;
alert(a);
}
})()

obj();

以上通过自调用函数简化了语法,闭包就是在函数内部返回一个函数的声明,在返回的函数中操作的变量会常驻在内存中,类似于c++里的static


使用闭包定义私有变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var module = (function(){
var count=100;
function aaa(){
count+=5;
alert(count);
}
function bbb(){
count+=20;
alert(count);
}
return {
funcA: aaa,
funcB: bbb
}
})()

解决IE浏览器下内存泄露问题

1
2
3
4
5
6
window.onload = function(){
var oDiv = document.getElementById('div1');
oDiv.onclick = function(){
console.log(oDiv);
}
}

在以上事件中形成了闭包,IE浏览器下oDiv是不会被释放的,如果元素节点很大的话会损失很大一部分内存

  • 解决办法
1
2
3
4
5
6
7
8
window.onload = function(){
var oDiv = document.getElementById('div1');
var oId = oDiv.id;
oDiv.onclick = function(){
alert(id);
}
oDiv = null;
}