美文网首页
JS基础知识-闭包

JS基础知识-闭包

作者: 小恐龙yaya | 来源:发表于2020-04-20 17:26 被阅读0次

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

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

    • 函数作为参数被传递
    • 函数作为返回值被返回

    例子抬上来

    • 函数作为返回值
        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. 自由变量的查找是在函数定义的地方,向上级逐级寻找,而不是在执行的地方。

    相关文章

      网友评论

          本文标题:JS基础知识-闭包

          本文链接:https://www.haomeiwen.com/subject/mqddihtx.html