美文网首页
进阶篇:闭包(18-1)

进阶篇:闭包(18-1)

作者: 饥人谷1904_陈俊锋 | 来源:发表于2019-07-16 10:22 被阅读0次

饥人谷学习进阶第 18 天

闭包的一些概念

A closure is the combination of a function and the lexical environment within which that function was declared. --MDN
一个闭包就是一个函数以及声明该函数的词法作用域的结合

闭包 = 函数 + 词法作用域

A closure is the local variables for a function - kept alive after the function has returned . --javascriptkit
闭包是函数的局部变量,在函数返回之后仍然存在

词法作用域(lexical environment)

在此重新回顾一下作用域链:

  • 函数在执行过程中,先从自己内部找变量
  • 如果找不到,再从创建当前函数的作用域(词法作用域)去找,以此往上
  • 注意找的是变量的当前的状态

那么 闭包 可以理解为:
函数连同它作用域链上的要找的那个变量 共同构成闭包

一般情况下运用闭包主要是为了

  1. 封装数据
  2. 暂存数据

典型的闭包案例:

function car(){
  var speed = 0
  function fn(){
    speed++
    console.log(speed)
  }
  return fn 
}

var speedUp = car()
speedUp()   //1
speedUp()   //2

在全局作用域下 speedUp 一直存在,即 car() 中的 fn 一直存在,所以 car() 里面的作用域就一直存在无法被销毁,因其内的 speedfn 这个函数所使用。

通过案例可以将闭包理解为:
函数(如:fn())连同它的词法作用域下使用的变量(如:speed)

闭包相关案例

var fnArr = [];
for (var i = 0; i < 10; i ++) {
  fnArr[i] =  function(){
    return i
  };
}
console.log( fnArr[3]() ) // 10

改造

// (1)
var fnArr = []
for (var i = 0; i < 10; i ++) {
  fnArr[i] =  (function(j){
    return function(){
      return j
    } 
  })(i)
}
console.log( fnArr[3]() ) // 3
// (2)
var fnArr = []
for (var i = 0; i < 10; i ++) {
  (function(i){
    fnArr[i] =  function(){
      return i
    } 
  })(i)
}
console.log( fnArr[3]() ) // 3
// (3)
var fnArr = []
for (let i = 0; i < 10; i ++) {
  fnArr[i] =  function(){
    return i
  } 
}
console.log( fnArr[3]() ) // 3

相关文章

  • 进阶篇:闭包(18-1)

    饥人谷学习进阶第 18 天 闭包的一些概念 A closure is the combination of a f...

  • Swift闭包(二):进阶篇

    Swift闭包的基础笔者已经写了一篇,如果你还不是很清楚基本使用,建议先看基础篇,如果已经会了,那直接跳过,一起学...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Day7 闭包(Closures)

    本页包含内容:• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包 1、闭包表达式 闭包...

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • swift- 闭包一

    /*• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包*/

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

网友评论

      本文标题:进阶篇:闭包(18-1)

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