闭包:一个函数和它的周围状态的引用捆绑在一起的组合
自由变量:函数内的某变量在该函数作用域内没有定义,该变量就会往该函数定义时的外层找其定义,这种变量称为自由变量
案例一:函数作为返回值
分析:
- test返回一个函数赋值给fn,fn中的a并没有定义 -> a为自由变量
- a自由变量需要找到定义它的语句
- a在匿名函数function中向外查找,找到了 const a=1 语句
- 最后console.log('a',a) 的结果是1
案例二:函数作为参数
分析:
- fn中的a为自由变量
- a在定义fn函数时的外层找a的定义语句
- 定义fn函数时,fn外层有const a=2 的语句(const a=1为fn函数被调用的地方)
- 最后系统判定初始时a=2
参考视频链接: