js闭包

一、闭包理解

1、如何产生闭包?

    * 当一个嵌套的内部(子)函数印用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包;

2、闭包到底是什么?

    *理解一:闭包是嵌套的内部函数(绝大部分人)

    *理解二:包含被引用变量(函数)的对象(极少数人)

    *注意:闭包存在于嵌套的内部函数中

3、产生闭包的条件?

    *内部函数引用了外部函数的数据(变量/ 函数)


二、常见闭包

 1、将函数作为另一个函数的返回值


实例 1

        图中整个过程中产生了一个闭包对象;

 2、将函数作为实参传递给另一个函数调用


实例 2

三、闭包作用

     1、使用函数的内部变量在函数执行完后,仍然存活再内存中(延长了局部变量的生命周期);

     2、让函数外部可以操作(读写)到函数内部的数据(变量/ 函数);

 问题:

     1、函数执行完后,函数内部声明的局部变量是否还存在?

        一般是不存在的,存在于闭包中变量才有可能存在。

     2、在函数外部能直接访问函数内部的局部变量吗?

         不能,但是通过闭包可以让外部操作

四、闭包的生命周期

    1、产生: 在嵌套内部函数定义执行完时就产生了(不是在调用);

    2、死亡: 在嵌套的内部函数成为垃圾对象时;                                

实例 3


五、闭包应用

    (1)、具有特定功能的js文件;

    (2)、将所有的数据和功能都封装在一个函数内部(私有的);

    (3)、只向外暴露一个包含n个方法的对象或函数;

    (4)、模块的使用者,只需要通过模块暴露的对象调用方法来实现对应的功能;

你可能感兴趣的:(js闭包)