闭包的简单理解

闭包的简单理解

闭包是函数嵌套,并且内部函数调用了外部函数的变量,从而形成闭包。代码如下:

function fn(){
	var name = 'hins'
	function fun(){
	console.log(name)
	}
	return fun
}
var f = fn()
f()

闭包的优点:
1、不会污染外部的命名空间
2、延伸变量的作用范围,即当外部函数执行后,内部的变量不会被立即销毁,并且能在外部使用闭包的时候调用它的外部函数的变量,起到变量保护的作用。
缺点:
1、外部函数的变量必须在闭包调用完后才会被回收,所以在被调用之前会占据内存空间,如果没被调用,就会导致内存泄漏。
2、闭包过多,如果没有及时回收变量,就会占据大量内存,影响效率。
解决方案:
1、能不用就不用闭包(这个不现实)
2、将未调用的变量设置为null(这个通常会忘记。。。)

闭包的简单案例,循环点击:点击li输出对应的index

  <ul>
    <li>hins</li>
    <li>sinlando</li>
    <li>Gio</li>
  </ul>
  <script>
    var lis = document.querySelectorAll('li')
    for (var i = 0; i < lis.length; i++) {
      //使用立即执行函数(匿名函数)产生一个小闭包
      (function (i) {
        lis[i].onclick = function () {
          console.log(i)
        }
      })(i)
    }
  </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值