zoukankan      html  css  js  c++  java
  • 闭包

    函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)。也就是说,闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。

    在闭包中有这两种使用方式,根据MDN所说的

    函数和对其周围状态的引用捆绑在一起构成闭包

    • 在返回一个函数时,他所使用的变量是根据函数定义时所在位置向上寻找.并不是在执行的时候
    // 函数作用返回值
    function create () {
       const a = 100
       return function () {
         console.log(a)
       }
    }
    
    const fn = create()
    const a = 200
    fn() // 100
    
    // 函数作为参数返回
    function print (fn) {
      let a = 200
      fn(a)
    }
    
    let a = 100
    function fn () {
      console.log(a)
    }
    
    print(fn)  // 100
    
    • 由于他能读取另一个作用域的变量,所以常常使用它来隐藏变量
    // 闭包隐藏数据, 只提供 API
    function creatCache() {
      const data = {} // 闭包中的数据, 被隐藏不被外界访问
      return {
        set: function (key, val) {
          data[key] = val
        },
        get: function (key) {
          return data[key]
        }
      }
    }
    
    const c = creatCache()
    c.set('a', 100)
    console.log(c.get('a'))
    
    • 注意点
      • 闭包会将函数及变量都存在内存中,对于内存消耗很大,所以不能滥用闭包
  • 相关阅读:
    第一章、Docker 简介
    远程库的创建及操作
    分支
    Git常用命令
    初始化本地仓库
    Git的本地结构与远程中心
    Git的安装
    版本控制系统
    冒泡排序
    选择排序
  • 原文地址:https://www.cnblogs.com/pamela1226/p/13445581.html
Copyright © 2011-2022 走看看