闭包
闭包是什么?
- 闭包就是一个函数,只不过被定义在函数的内部,内部的函数就叫做它外层函数的闭包。闭包只在声明他的函数内部有效。
function f() {
var a = function() {};
} // 函数a就是函数f的闭包
闭包的作用?
- 闭包可以获取并保留外层函数内部的作用域(因为闭包可以访问外层函数的内部变量,并缓存上一次调用时,外层函数内部变量的结果)
- 实现封装,将一些变量定义在函数内部成为私有,将变量(状态)的变化封装在安全的环境中,不会轻易被外界修改,用闭包对外形成接口以此访问内部变量
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p>局部变量计数。</p>
<button type="button" onclick="count()">计数</button>
<p id="demo">0</p>
<script>
var add = function () {
var counter = 0;
return function () {return counter += 1;}
};
var add1 = add();
function count(){
document.getElementById("demo").innerHTML = add1();
}
</script>
</body>
</html>
--上面函数add的闭包add1保留了add中内部变量count的状态,这样每次点击button就会调用闭包add1,显示的内部变量count就会依次加一,变成计数器
闭包的问题?
- 闭包会非常耗费内存,因为每次调用外层函数,就会形成一个新的闭包,新的闭包又会保留外层函数的作用域,这样内层的被占用空间就很大。
完善闭包?
- 用匿名立即执行函数 ()(),这样就可以立即引用函数中的闭包,避免函数中的闭包多次生成,占用空间。

浙公网安备 33010602011771号