JavaScript中的闭包

1.闭包的概念:
闭包是针对函数的一种操作,是一种高级应用方式,通过建立一个不 被销毁的储存空间,来在函数的外部进行调用和使用函数内部的数据。
通俗一点理解就是,闭包就是 一个能够在外部读取其他函数内局部作用域变量的函数,在本质上,闭包是将函数内部和函数外部链接起来的桥梁。
2.如何去定义一个不被销毁的执行空间呢?
通常情况下,函数执行完毕,函数的之星空间中的程序也会被销毁。
定义不被销毁的执行空间的方法:
(1)在函数内部,返回一个引用数据类型(数组,对象 ,函数)。
(2) 在函数的外部,有变量来引用这个函数,此时这个函数的执行空间就不会被销毁。
3.定义闭包
(1) 定义一个函数 A 返回值是一个函数B。
(2) 在返回值函数B中使用函数A定义的局部作用域变量。
(3) 在函数A的外部,引用函数A 并且执行返回值函数B。
如下:

 function funA( ) {
        let int=100;
        return function funB( ) {
            let sum=int;
            return sum;
        }
    }
    let f1=funA();  // 调用函数A,执行结果结果就是函数B
    let f2=f1();      //引用函数f1( ),实际上就应用函数B
    console.log(f2);

闭包的优点:
1.函数作用域空间不会被销毁 空间中的内容,永远存在
2.可以从外部访问函数内部的变量,使用变量数据方便
3.保护私有作用域变量 确保私有作用域变量一直存在
4.增加块级作用域(java,C,C++都有块作用域,即一对花括号里定义的变量,只在该花括号里起作用。JS中,就算在花括号里定义的变量(会做声明的前),属于整个函数内部JS中,没有块作用域,但是在闭包的写法里,可以体现出来)
闭包的缺点:
1.大量的内存空间
2. 容易泄露数据信息
3. 占用内存,内存消耗很大,所以不要滥用闭包,否则会造成网页的性能问题
闭包与事件的应用:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<ul>
    <li>我是li一</li>
    <li>我是li二</li>
    <li>我是li三</li>
    <li>我是li四</li>
    <li>我是li五</li>
</ul>
</body>
</html>
<script>
    let oLis = document.querySelectorAll('li');
    for(var i = 0 ; i <= oLis.length-1 ; i++){
        oLis[i].addEventListener('click' , (function(int){
            return function(){
                console.log(int+1)
            }
        }) (i))
    }
</script>
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值