作用域应用的特殊情况,有两种表现:

  • 函数作为参数被传递
  • 函数作为返回值被返回
  1. // 函数作为返回值
  2. function create() {
  3. let a = 100;
  4. return function () {
  5. console.log(a)
  6. }
  7. }
  8. let fn = create();
  9. let a = 200;
  10. fu() // 100
  1. // 函数作为参数被传递
  2. function print(fn) {
  3. let a = 200
  4. fn()
  5. }
  6. let a = 100
  7. function fn() {
  8. console.log(a)
  9. }
  10. print(fn) // 100

闭包:自由变量的查找,是在函数定义的地方,向上级作用域查找
不是在执行的地方!!!