美文网首页
初(粗)谈闭包

初(粗)谈闭包

作者: Mrs_nn | 来源:发表于2017-12-07 22:16 被阅读0次

闭包

1 .闭包是一个特殊对象,它由执行上下文(代号A)与在该执行上下文中创建的函数(代号B)共同组成。当B执行时,如果访问了A中变量对象中的值,那么闭包就会产生;在《你不知道的js》中认为函数B为闭包,但是在chrome中和红皮书中认为函数A为闭包。
2 创建闭包主要有3个特点,分别是:
用外层函数封装受保护的变量及内层函数
将内层函数返回到外层函数外部
调用外层函数,获得内层函数的对象

  // demo1.1
  function  foo (){
      var a = 10;
      function bar() {
            return a;
      }
      return bar;
  };
  var bar = foo();
  bar();

反例:

  // demo02
  var fn;
  var m = 20;
  function foo() {
      var a = 2;
      function baz(a) {
          console.log(a);
      }
      fn = baz;
  }
  function bar() {
      fn(m);
  }

  foo();
  bar(); // 20

原因:m属于全局变量,不属于函数foo的内部变量,函数执行时并没有调用其执行上下文中的变量a,所以这并不存在闭包;可见闭包生成的两个必备的条件是:
1、在函数内部创建新的函数;
2、新的函数在执行时,访问了函数的变量对象;

  //demo3
  function factory(){
      var n=1;//局部变量
      return funtion(){
            return n++;
      }
  }
  var icbd=factory();//第一次调用闭包的完成函数
  console.log(icbd());//?
  console.log(icbd());//?
  console.log(icbd());//?

下面是一个示例 — makeAdder 函数:

   function makeAdder(x) {
       return function(y) {
          return x + y;
       };
  }
  var add5 = makeAdder(5);
  var add10 = makeAdder(10);
  console.log(add5(2));  // ?
  console.log(add10(2)); // ?

参考文档:
https://developer.mozilla.org/zh-CN/docs/web/javascript/closures
https://yangbo5207.github.io/wutongluo/ji-chu-jin-jie-xi-lie/si-3001-zuo-yong-yu-lian-yu-bi-bao.html
https://yangbo5207.github.io/wutongluo/ji-chu-jin-jie-xi-lie/liu-3001-zai-chrome-zhong-guan-cha-han-shu-diao-yong-zhan-3001-zuo-yong-yu-lian-3001-bi-bao.html

相关文章

  • 初(粗)谈闭包

    闭包 1 .闭包是一个特殊对象,它由执行上下文(代号A)与在该执行上下文中创建的函数(代号B)共同组成。当B执行时...

  • Swift三剑客

    Swift三剑客:闭包、泛型和协议 一、闭包 如何看闭包,晕 参考文章:谈一谈闭包 1、闭包定义: 在计算机科学中...

  • js面试知识点汇总

    1.什么是闭包?举例说明从作用域链谈闭包闭包就是能够读取其他函数内部变量的函数,闭包实现累加效果 function...

  • 闭包初认识

    1.html如下: 2.在,script标签中插入如下js 执行结果均为4;3.改变代码如下 得到了预期结果,点击...

  • 初认闭包

    写在最前:和其他大多数高级编程语言一样,JavaScript也采用词法作用域。 为了实现词法作用域,JavaScr...

  • swift-闭包

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

  • 闭包的初了解

    1.什么是闭包? 内部函数能够返回外部函数的作用域(当内部函数返回时,它会携带一个背包,背包中是函数声明时作用域内...

  • 闭包,闭包,闭包

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

  • 闭包-Closures [swift 5.1]

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

  • Day7 闭包(Closures)

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

网友评论

      本文标题:初(粗)谈闭包

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