闭包,是指脚本语言中,一个函数可以访问其他函数作用域内的变量。一般而言,当一个函数结束后,变量就随之释放了,但是闭包不同,下面看两个例子。
例子1,闭包访问函数局部变量:
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title></title>
<script>
window.onload = function() {
var aLi = document.getElementsByTagName('li');
for (var i = 0; i < aLi.length; i++) {
(function() {
aLi[i].onclick = function() {
alert(i);
};
})();
}
};
</script>
</head>
<body>
<ul>
<li>123</li>
<li>456</li>
<li>789</li>
</ul>
</body>
</html>
例子2,闭包访问参数:
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title></title>
<script>
window.onload = function() {
var aLi = document.getElementsByTagName('li');
for (var i = 0; i < aLi.length; i++) {
(function(i) {
aLi[i].onclick = function() {
alert(i);
};
})(i);
}
};
</script>
</head>
<body>
<ul>
<li>123</li>
<li>456</li>
<li>789</li>
</ul>
</body>
</html>
观察结果,可以发现,例子1中的值始终是3,而例子2中的值,则是0, 1, 2。由此可以体会一下闭包的效果。