闭包JavaScript

闭包是一个能够访问自身作用域、父级甚至全局作用域变量的函数,常见于函数嵌套。它的主要作用是保持函数内部变量的持久化,允许外部访问和修改私有数据,但过度使用可能导致内存泄漏。闭包的应用包括支持setTimeout传参和封装私有变量或方法等。
摘要由CSDN通过智能技术生成

一、什么是闭包?

        广义上:一个函数就是一个闭包

二、怎么产生闭包的?

        如果一个函数访问了此函数父级以及以上的作用域变量,那么这个函数就是一个闭包。

        但是实现闭包最常见的方式是函数嵌套(当一个嵌套的内部函数引用了外部函数的变量或函数时,就产生了闭包)

     var a=1;
        (function() {
            console.log(a);
        })();

三、闭包有什么作用?

           闭包的作用:①使函数内部的变量在函数执行完之后仍然存放在内存中,延长了局部变量的声明周期 ;② 让函数外部可以操作(读写)到函数内部的数据

        注意:闭包不可以滥用,会造成内存泄漏

  function sum() {
            var s=0;
            return function(){
                s++;
                console.log(s);
            }
        }
       sum()();//1
       sum()();//1
       var r=sum();//在这一步变量执行之后没有销毁( s还在 ),延长了S的生命周期
       r();//1
       r();//2 让函数外部可以操作(读写)到函数内部的数据

四、闭包的常见使用场景

1. 使 setTimeOut 支持传参

   function fn(p){
        return function(){
            console.log(p);
        }
    }
    var f1=fn(123);
    setTimeout(f1,1000)

 2. 封装私有变量或方法

  var count=(function(){
        var privateVar=0;
        function changeVar(){
            privateVar++;
        }
        return {//count是函数的返回值 是一个对象
            add:function(){
                changeVar();//私有方法
            },
            showValue (){
                return privateVar;//私有属性
            }
        }
    })();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值