闭包

闭包是什么?

  • 闭包就是一个函数,只不过被定义在函数的内部,内部的函数就叫做它外层函数的闭包。闭包只在声明他的函数内部有效。
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就会依次加一,变成计数器

 

闭包的问题?

  • 闭包会非常耗费内存,因为每次调用外层函数,就会形成一个新的闭包,新的闭包又会保留外层函数的作用域,这样内层的被占用空间就很大。

完善闭包?

  • 用匿名立即执行函数 ()(),这样就可以立即引用函数中的闭包,避免函数中的闭包多次生成,占用空间。
posted @ 2018-10-30 01:26  刚好遇见你_寻  阅读(105)  评论(0)    收藏  举报