美文网首页
JS 中的闭包

JS 中的闭包

作者: WebsnowDrop | 来源:发表于2024-06-30 17:32 被阅读0次

    常见的面试题什么是闭包

    闭包是 JS 的一种 语法特性,其他语言也有这种特性
    参考MDN上闭包的定义:
    闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。

    重点:闭包让开发者可以从内部函数访问外部函数的作用域。
    举个例子:

    const add2 = function (){
      var count = 0
      return function add (){ // 访问了外部变量的函数
      count += 1
      console.log(count)
    }
    }()
    add2() //1
    add2() // 2
    
    • 首先定义add2 是一个自动执行函数
    • 自动执行函数内部定义了局部变量 count
    • 自动执行函数返回值是函数 add
    • add2() 就等于调用add函数,所以打印结果为 1
    • add2() 再次调用add函数,所以打印结果为 2

    我的理解

    根据MDN 定义,闭包是一个函数以及其捆绑的周边环境状态的引用的组合。结合上面的例子闭包就是:
    闭包 = 函数 add + 自由变量 a,

    注意:闭包既不是 函数 add,也不是局部变量 a,而是二者组成的整体

    闭包的优点

    • 避免全局污染
    • 提供了对局部变量的间接访问
    • 维持变量,使其不被垃圾回收

    闭包的缺点

    • 使用不当会造成内存溢出,所以少用闭包

    相关文章

      网友评论

          本文标题:JS 中的闭包

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