js中的闭包

1. 什么是闭包?

通俗来讲就是函数外部中的作用域能够访问函数内部中的变量,例:

var a = 123;
function fn1(){
    var b = 234;
    function fn2(){
        console.log(b);
    }
    return fn2;
}
var result = fn1();
result(); // 234
console.log(b)  // b is not defined
//1.闭包就是fn2,即能够读取其他函数内部变量的函数
//2.定义在一个函数内部的函数
//3.闭包最大的特点:就是他可以记住诞生的环境,比如fn2记住了它诞生的环境fn1,
//所以fn2中可以得到fn1中内部变量

本质上:闭包就是函数内部和函数外部链接的一座桥梁

2. 闭包的用途

1.通过闭包制作计数器

 作用:读取函数内部的变量,这些变量始终在内存中
 ps:在使用闭包的时候小心内存泄漏(内存未释放或无法释放)

function a(){
    var start = 0;
    function b(){
        return start++;
    };
    return b;  
}
var inc = a();
console.log(inc())  // 0
console.log(inc())  // 1
console.log(inc())  // 2
//释放当前变量
inc = null

2.闭包能够封装对象的私有属性和方法

function(){
    //私有属性
    var age = n;
    //私有方法
    function setAge(n){
        age = n;
    }
    function getAge(){
        return age
    }
    return {
        name:name,
        setAge:setAge,
        getAge:getAge
    }
}
var p1 = Person( 'mjj' );
p1.setAge(18);
console.log(p1.getAge());  // 18
p1 = null

3.闭包的注意点

 使用闭包使得函数中的变量始终在内存中,内存消耗很大,所以不能滥用闭包,否则会造成页面性能问题

4.总结

 1.每个父函数调用完成,都会形成新的闭包,父函数中的变量始终会在内存中,相当于缓存,小心内存泄漏
 2.闭包需要满足三个条件:
  1)函数的嵌套  2)访问所在的作用域 3)在所在作用域外被调用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容