JavaScript闭包详解

目录

  • 1.什么是闭包?
    • 1.2 闭包的记忆性:函数能够记住定义时所处的环境
    • 1.3 闭包现象:JS中每次创建函数时都会创建闭包
  • 2.闭包的功能:记忆性、模拟私有变量
    • 2.1 记忆性
    • 2.2 模拟私有变量(安全化变量)
  • 3.IIFE(Immediately Invoked Function Expression,立即调用函数表达式):
    • 3.1 IIFE作用1-为变量赋值
    • 3.2 IIFE作用2-将全局变量变为局部变量
  • 总结

    1.什么是闭包? 函数本身和该函数声明时所处的环境状态的组合。
    JavaScript闭包详解
    文章图片


    1.2 闭包的记忆性:函数能够记住定义时所处的环境
    JavaScript闭包详解
    文章图片

    JavaScript闭包详解
    文章图片


    1.3 闭包现象:JS中每次创建函数时都会创建闭包
    JavaScript闭包详解
    文章图片


    2.闭包的功能:记忆性、模拟私有变量
    2.1 记忆性
    JavaScript闭包详解
    文章图片

    举例:
    JavaScript闭包详解
    文章图片

    Document - 锐客网

    细节:
    1:闭包的记忆性
    2:函数return checkTemp,是一个函数名
    3:定义var checkTemp_A和checkTemp_A来获取函数名checkTemp,而不是直接调用

    2.2 模拟私有变量(安全化变量)
    JavaScript闭包详解
    文章图片

    闭包代码举例:
    Document - 锐客网

    JavaScript闭包详解
    文章图片

    其实可以理解,JavaScript不像C++、Java那样能定义函数的类型,比如int sum()、int add()、int pow()等等,所以就需要利用闭包的特性:即在函数内闭包的记忆性来对函数内变量进行操作,然后返回闭包函数的名称来进行内部数据操作。

    3.IIFE(Immediately Invoked Function Expression,立即调用函数表达式): JS特殊函数,一旦被定义,就立即被调用
    JavaScript闭包详解
    文章图片


    3.1 IIFE作用1-为变量赋值
    举例:
    前后两图对比一下,体现编程水平。。。简化代码。。美观。。。
    JavaScript闭包详解
    文章图片

    JavaScript闭包详解
    文章图片


    3.2 IIFE作用2-将全局变量变为局部变量
    JavaScript闭包详解
    文章图片

    这种情况下,下面五个语句的结果都是5,因为在JS中是没有块作用域这个概念的(暂时这么理解),所以var i就成了全局变量,for循环后i=5。所以五个语句的结果都是5。
    那么加下来可以利用IIFE解决这个问题,其本质是利用了函数的闭包特性
    JavaScript闭包详解
    文章图片

    将全局变量i传入IIFE函数中,全局变量 就 变成了局部变量,再利用JS函数的闭包特性,即可以实现图中arr[2]()的功能。

    总结 【JavaScript闭包详解】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

      推荐阅读