闭包的基本概念和应用

闭包:函数嵌套函数,内部函数innerFun就是闭包

function outerFun(){

    function innerFun(){

        consol.log(a);

        }

        return innerFun;//返回值为内部函数(闭包)

}

let fun = outerFun();//

fun();//输出10

内部函数是否可以访问到a,了解作用域链

正常情况下,函数执行完成之后,内部变量会销毁(释放内存空间)

销毁

function fun(){

    let a = 10;

    consol.log(a);

}

fun()

执行过程中可以获得a的值,执行结束之后变量a会被释放


闭包:内部函数没有执行完成,外部函数变量不会销毁

                闭包的条件:

                    - 函数嵌套函数

                    - 内部函数使用外部函数的变量

                    - 调用外部函数

                闭包到底是什么:

                    - 通俗的理解:函数内部嵌套的函数

                    - 浏览器查看后理解:内部函数的Scopes中,包含引用外部函数变量的一个对象

                闭包的作用:

                    - 延长了局部变量的生命周期

                    - 在外部控制局部变量

                闭包的缺点:

                    - 局部变量会长期驻留在内存中,可能会造成内存泄漏(IE9以下)

                解决闭包带来的缺点:

                    - 减少使用闭包

                    - 及时释放


闭包的应用

    封装代码

let a = 10;

let b = 20;

function add(){

    return a+b;

}

function sub(){

    return a-b;

}

let result1 = add();

let result2 = sub();

console.log(result1);

console.log(result2);

定义两个全局变量和两个全局函数,使用闭包进行封装

闭包代码的封装实现

let module = (function(){

     let a = 10;

     let b = 20;

     function add(){

        return a+b;

    }

    function sub(){

        return a-b;

    }

}) ()

//立即执行函数:用一个括号把一个fun放进去,后面再加一个小括号

return{

    add:add,

    sub:sub

    //add,

    //sub

//ES6语法所提供的简写

}

let result1 = moudle.add();

let result2 = moudle.sub();

console.log(result1);

console.log(result2);

利用闭包实现模块化概念,设置私有变量

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.标识符:第一个字符必须是字母、下划线_、美元符号$ 2.区分大小写 3.关键字和保留字:*表示第5...
    韭菜过敏者阅读 205评论 0 0
  • 第三章 1. 语法 1.1 区分大小写 1.2 标识符 1.3 注释 ​ 1.4 严格模式 ​ 1.5 语句 2....
    杜小飞saya阅读 267评论 0 2
  • 为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数 一、定义函数 ~~~ d...
    rookieyu阅读 814评论 0 0
  • 01-常量与变量 学习swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔阅读 5,219评论 2 19
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,111评论 0 4