变量的作用域:
在JavaScript中,局部变量的作用域是由它定义的函数决定,嵌套函数可以访问它的外部作用域的变量。
function init() {
var name="Liu dw";
function displayName() {
alert(name);
}
displayName();
}
init();
闭包的定义
闭包是涉及独立变量的函数。换句话说,在闭包中定义的函数会记住它创建的环境。
简单来说:闭包就是能够读取其他函数内部变量的函数。
本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
下面的 displayName 就是一个闭包:
function aaa() {
var name="Liu dw";
function displayName() {
alert(name);
}
return displayName;
}
var mya=aaa();
mya();
闭包的应用
<style type="text/css">
body{
font-family: Heivetica;
font-size:12px;
}
h1{
font-size: 1.5em;
}
h2{
font-size: 1.2em;
}
</style>
<p>some</p>
<h1>some1</h1>
<h2>some2</h2>
<a href="#" id="size-12">12</a>
<a href="#" id="size-14">14</a>
<a href="#" id="size-16">16</a>
<script type="text/javascript">
function makeSizer() {
return function() {
document.body.style.fontSize=size+'px';
};
}
var size12=makeSizer(12);
var size14=makeSizer(14);
var size16=makeSizer(16);
document.getElementById('size-12').onclick=size12;
document.getElementById('size-14').onclick=size14;
document.getElementById('size-16').onclick=size16;
</script>
性能考虑
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。