zoukankan      html  css  js  c++  java
  • 函数式编程,闭包,作用域,全局变量

     function generateClosure(){
      var count = 0;
    
      var get = function(){
       return ++count;
     }
    
      return get;
    }
    
    var counter = generateClosure();
    console.log(counter()); // 1
    console.log(counter()); // 2
    console.log(counter()); // 3
    

    一个函数返回它内部定义的一个函数,就产生了一个闭包,闭包不仅包括被返回的函数 ,还包括这个函数的定义环境。上面例子中,generateClosure内部的函数get被外部的变量counter引用时,counter和generateClosure的局部变量就构成了一个闭包。

     
    function generateClosure(){
      var count = 0;
    
      var get = function(){
       return ++count;
     }
    
      return get;
    }
    
    var counter1 = generateClosure();
    var counter2 = generateClosure();
    console.log(counter1()); // 1
    console.log(counter2()); // 1
    console.log(counter1()); // 2
    console.log(counter1()); // 3
    console.log(counter2()); // 2
    

    上面例子generateClosure调用了两次,产生了两个独立的闭包实例,二者的定义环境不一样。可以这样理解,generateClosure返回get的时候,也将get能引用到的generateClosure的局部变量也返回了,并在内存中生成了一个副本。上面的例子即使把var换成let,值类型count换成对象count{value:0}必不会影响结果。

  • 相关阅读:
    DZY Loves Sequences
    Boredom easy dp
    floyd算法 poj1125
    poj3259 Bellman_Ford算法
    poj1860 Bellman_Ford算法
    Java 获取资源文件路径
    CLion 2020.1.2 激活
    Kotlin学习笔记
    Kotlin Hello World
    WebStorm 2020.1.2 激活
  • 原文地址:https://www.cnblogs.com/dirichlet/p/7106452.html
Copyright © 2011-2022 走看看