JS基础知识-闭包

2020-04-20  本文已影响0人  小恐龙yaya

所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

闭包,看似很高大上的名字其实实质本质就是作用域应用的特殊情况:

例子抬上来

    function create() {
      let a = 100
      return function () {
        console.log(a)
      }
    }
    let fn = create()
    let a = 200
    fn()   // 100

当函数fn执行时在全局作用域,函数定义在create的作用域,a是自由变量,当执行返回的函数时寻找的顺序就是先在执行的作用域寻找,当前作用于找不到就像上级寻找,所以找到了a=100

    function print(fn) {
      let a = 200
      fn()
    }
    let a = 100
    function fn() {
      console.log(a)
    }
    print(fn) // 100

同上原理一样寻找到a为100。

总结

  1. 自由变量的查找是在函数定义的地方,向上级逐级寻找,而不是在执行的地方。
上一篇下一篇

猜你喜欢

热点阅读