JavaScript闭包详解

1.什么是闭包?

函数本身和该函数声明时所处的环境状态的组合。

JavaScript闭包详解_第1张图片

1.2 闭包的记忆性:函数能够记住定义时所处的环境

JavaScript闭包详解_第2张图片

JavaScript闭包详解_第3张图片

1.3 闭包现象:JS中每次创建函数时都会创建闭包

JavaScript闭包详解_第4张图片

2.闭包的功能:记忆性、模拟私有变量

2.1 记忆性

举例:

JavaScript闭包详解_第5张图片




    
    
    
    Document


    

细节:

1:闭包的记忆性

2:函数return checkTemp,是一个函数名

3:定义var checkTemp_A和checkTemp_A来获取函数名checkTemp,而不是直接调用

2.2 模拟私有变量(安全化变量)

JavaScript闭包详解_第6张图片

闭包代码举例:




    
    
    
    Document


    

JavaScript闭包详解_第7张图片

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

3.IIFE(Immediately Invoked Function Expression,立即调用函数表达式):

JS特殊函数,一旦被定义,就立即被调用

JavaScript闭包详解_第8张图片

3.1 IIFE作用1-为变量赋值

举例:

前后两图对比一下,体现编程水平。。。简化代码。。美观。。。

JavaScript闭包详解_第9张图片

JavaScript闭包详解_第10张图片

3.2 IIFE作用2-将全局变量变为局部变量

JavaScript闭包详解_第11张图片

这种情况下,下面五个语句的结果都是5,因为在JS中是没有块作用域这个概念的(暂时这么理解),所以var i就成了全局变量,for循环后i=5。所以五个语句的结果都是5。

那么加下来可以利用IIFE解决这个问题,其本质是利用了函数的闭包特性

JavaScript闭包详解_第12张图片

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

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

你可能感兴趣的:(JavaScript闭包详解)