美文网首页
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. 自由变量的查找是在函数定义的地方,向上级逐级寻找,而不是在执行的地方。

相关文章

  • 5-1 从基础知识到JSWebAPI

    回顾js基础知识 JS-web-API 总结 回顾js基础知识 变量类型和计算 原型和原型链 闭包与作用域 异步和...

  • Gradle开发-Groovy闭包

    # 闭包 闭包的基础知识 闭包的使用 闭包 this,owner,delegate 的理解 总结 ## 闭包的基础...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • JS基础知识:变量对象、作用域链和闭包

    JS基础知识:变量对象、作用域链和闭包 前言:这段时间一直在消化作用域链和闭包的相关知识。之前看《JS高程》和一些...

  • JS闭包

    JS闭包 闭包练习

  • JS基础知识-闭包

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

  • JS闭包问题(二)

    在之前的JS闭包问题(一)文章中大概介绍了一下JS闭包,同时讲了闭包与变量之间的问题,今天我们继续聊闭包,聊聊闭包...

  • JS-Web-Api

    JS基础知识,规定语法(ECMA262标准); 变量类型和计算 原型和原型链 作用域和闭包 异步和同步 JS We...

  • JS闭包大结局(JS闭包系列3)

    在上一篇中再谈JS闭包(JS闭包系列2),我详细的介绍了JS中的变量作用域相关的概念,结合第一节关于JS闭包(JS...

  • 6.js-Web-API-DOM、BOM

    js基础知识:基于ECMA 262标准(规定基础语法、规则) --变量类型和计算--原型和原型链--闭包和作用域-...

网友评论

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

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