标签:
闭包:是由函数和与其相关的引用环境组合而成的。
闭包允许函数访问其引用环境中的变量(又称自由变量)
广义上说,所有JS的函数都可以称为闭包,因为JS函数在创建时保存了当前的词法环境。
function add() {
var i = 0;
return function () {
alert(i++);
}
}
var f = add();
f(); //0
f(); //1
执行完以后,变量i,并没有被释放。
add函数的返回结果就是闭包。
闭包的应用:
(1)可以保存现场, 点击li标签时,弹出1,2,3,说对应的数字
<ul id="uli">
<li>1111</li>
<li>2222</li>
<li>3333</li>
<li>4444</li>
<li>5555</li>
</ul>
<script type="text/javascript">
var uli = document.getElementById(‘uli‘);
var lis = uli.getElementsByTagName(‘li‘);
function helper(i) {
return function () {
alert(lis[i].innerHTML);
}
}
for (var i = 0; i < lis.length; i++) {
lis[i].onclick = helper(i);
}
</script>
(2)封装
var observer = (function () { var observerList = []; return { add : function (obj) { observerList.push(obj); }, empty : function (obj) { observerList = []; }, getCount : function () { return observerList.length; }, get : function () { return observerList; } } })();
外部无法访问内部的变量,而内部可以访问外部的变量。可以只暴露借口,而私有变量得到了保护。
标签:
原文地址:http://www.cnblogs.com/hgonlywj/p/4857743.html