美文网首页
闭包笔记

闭包笔记

作者: fejavu | 来源:发表于2019-05-12 00:12 被阅读0次

闭包的定义

MDN 的定义

闭包是函数和声明该函数的词法环境的组合。

词法作用域

参考作用域链:

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

闭包主要是为了:

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

闭包案例1

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

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

闭包案例2
如果想输出3,要如何改造代码?

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]()) ;

改造2

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

闭包案例3
封装 car() 函数,类似 MDN 案例 中模拟私有方法

var car = (function() {
  var speed = 0;
  function set(s) {
    speed = s;  
  }
  function get() {
    return speed; 
  }
  function speedUp() {
    speed++;
  }
  function speedDown() {
    speed--;
  }
  return { 
    set:set,
    get:get,
    speedUp:speedUp,
    speedDown:speedDown
  } 
})()

car.set(30)  // 30
car.get()  //30
car.speedUp()
car.get()  //31
car.speedDown()  //30
car.get()  // 30

闭包案例4
实现一个sum,实现如下调用:

console.log(sum(1)(2));  // 3
console.log(sum(4)(-3));  // 1

// 实现
function sum(i) {
  return function(j) {
    return  i+j;
  }
}

参考阅读

  1. 饥人谷闭包课件,饥人谷
  2. MDN闭包章节,MDN
  3. wikiPedia定义,wikiPedia

相关文章

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • JavaScript闭包学习笔记

    @(JS技巧)[闭包] JavaScript闭包学习笔记 什么是闭包? 有些情况下,函数调用完成之后,其执行上下文...

  • javascript中的闭包

    该文章是MDN闭包文档学习笔记,方便日后查阅。如要查阅源文档,请移步闭包文档传送门 闭包 闭包是函数和声明该函数的...

  • 闭包笔记

    ########js链式作用域:1、子对象会一级一级向上寻找父对象的变量,父对象的所有变量,对子对象都是可见的2、...

  • 闭包笔记

    闭包的定义 MDN 的定义: 闭包是函数和声明该函数的词法环境的组合。 词法作用域 参考作用域链: 函数在执行过程...

  • avaScript 闭包的理解

    JavaScript 学习笔记之闭包 这篇文章是我学习闭包的笔记与总结,后面会有一些例子,结合画图的形式来理解,什...

  • JavaScript学习笔记(4) 闭包详解(Closure A

    《JavaScript学习笔记(4) 闭包详解(Closure Are Not Magic)》 ---- 写在开头...

  • swift-闭包

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

  • swift学习笔记 ⑥ —— 闭包

    Swift学习笔记 - 文集 闭包,就是能够读取其他函数内部变量的函数。Swift 中的闭包与 C 和 OC 中的...

  • 闭包,闭包,闭包

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

网友评论

      本文标题:闭包笔记

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