三十一、结合数组观察闭包
31.1 闭包
函数本身就是闭包。
31.1.1 函数可以记住自己定义时所处的外部环境,和内部语句,这就是闭包。
1 | <script> |
1 | <script> |
对于inner
函数,外部环境 var a = 10;
内部语句console.log(a)
,不管我们把inner
函数那到哪里,它都可以记住自己所处的外部环境(变量的作用域)和自己的内部语句。
闭包是函数天生存在的性质,不需要任何结构,只不过我们需要借助这种形式体会倒闭包。
1 | <script> |
1 | <script> |
31.1.2 闭包并不是一成不变的,函数的每一次调用都会产生一个全新的闭包。
1 | <script> |
31.2 结合数组观察闭包
闭包:
函数天生存在的性质,能够记住声明时所处的外部环境和内部语句
数组:
[],数组中可以保存任何数据类型,将数组中每一项存放函数,函数内部可以书写序号
1 | // 声明数组,将一些函数存放在数组中 |
想要的结果为3
,1
。结果全部都是10
由于闭包的影响,任何一个函数i
都是记住的10
函数天生存在闭包记住了i
,也记住了内部语句return
,当函数调用时,闭包不是一成不变的,i
已经变成了10
,所以所有函数的返回值都是10
解决方法:
通过IIFE解决
1 | // IIFE 函数在声明时立即调用 |