专栏首页柠檬先生javaScript 递归 闭包 私有变量

javaScript 递归 闭包 私有变量

递归

  递归的概念

    在程序中函数直接或者间接调用自己。

     跳出结构,有了跳出才有结果。

   递归的思想

     递归的调用,最终还是要转换为自己这个函数。

   应用 

  function sum(n){
      if(n ==1) return 1;
      return sum(n-1) + n
  }
  sum(100)
  var fib = function (n){
      if(n <=2){
          return 1;
      }
      return fib(n-1) + fib(n-2);
  }
  console.log(fib(5))    

    数组扁平化

    function flatten(arr) {
             return arr.reduce(function(prev,next){
            return prev.concat(Array.isArray(next) ? flatten(next) : next)
            },[])
    }        

    递归的两个必要因素:递归方程,递归结束条件。

闭包

  闭包是指有权访问一个函数作用域中的变量的函数。

    function fun(){
        // 函数内部的变量,函数外部无法访问
        var privateVal = "private value";
  
        // 下面是闭包的精髓:
        // 在函数内部返回一个匿名函数,匿名函数能够访问fun 函数的的变量
        return function(){
          return privateVal;
        }
     }
     fun()();    // 第一个() 执行了fun 函数,返回值是一个匿名函数,第二执行了匿名函数。// 因此输出了"private value”
     // 以下代码,等同于fun()();
     var temFun=fun();
     console.log(temFun()); // 输出:"private value"

   闭包只能取得包含函数中任何变量的最后一个值

   function fun(){
      var result = new Array();
      for(var i=0;i<10;i++){
        result[i] = function(){
          return i;
        }
      }
      return result;
   }
   var result = fun();
  console.log(result[0]()); // 为什么会输出10?

  我们可以通过立即执行函数进行改造,把i 的值绑定在闭包函数内部

 function fun(){

    var result = new Array();
    for(var i=0;i<10;i++){
      result[i]=function(num){
        return function(){
          return num
        }
      }(i)
    }
    return result;
  }
  var result = fun();
   console.log(result[0]());  // 输出0
  console.log(result[0]()); // 输出1

私有变量

  创建私有变量的方法

    1.构造函数

    function Person(name){
      this.getName = function(){
        return name;
      };
      this.setName = function(value){
        name = value;
      }
    }
    var tc = new Person('tc');
    var dj = new Person('dj');
    tc.getName();   // tc
    dj.getName();  // dj

    2.静态私有变量

    (function(){
      var name = '';
      Person = function(value){
        name= value;
      }
      Person.prototype.getName = function(){
        return name;
      }
      Person.prototype.setName = function(value){
        name = value;
      };

     })();
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://www.cnblogs.com/nmxs复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Javascript 闭包与变量

    JavaScript中的作用域链的机制引出了一个副作用,即闭包只能取得包含函数中任何变量的最后一个值。闭包所保存的是整个变量对象,而不是某个特殊的值。

    大道七哥
  • javascript - 闭包

    今天群里聊到JS的闭包,说是不理解。我看了下那个PDF的截图上的内容,。。。。我就看了一小会,反正也没看太看懂,写的太玄幻。。 我就觉得这个吧,看不懂闭包,其实...

    web前端教室
  • JavaScript闭包

    函数和对其词法环境lexical environment的引用捆绑在一起构成闭包,也就是说,闭包可以让你从内部函数访问外部函数作用域。在JavaScript,函...

    WindrunnerMax
  • JavaScript闭包

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛
  • Javascript闭包

    越来越觉得国内没有教书育人的氛围,为了弄懂JS的闭包,我使出了我英语四级吃奶的劲去google上搜寻着有关闭包的解释,当我看到stackoverflow上这一篇...

    用户1065635
  • JavaScript闭包

    其实关于闭包各个论坛社区里都有很多的文章来讲它,毕竟闭包是JavaScript中一个特色,也正因为这个雨中不同的特色也让闭包理解起来有一些吃力。笔者在这里不...

    IMWeb前端团队
  • javascript闭包

    ## 定义 **闭包:**有权访问另一个函数作用域中的变量的函数。 ## 解析 相信刚看到这个定义,很多人肯定很迷糊,现在给出示例。 ``` function ...

    用户1624346
  • Javascript 闭包

    1. 创建一个函数poll,它接受两个参数checkStatus[函数],callback[函数]。 2. poll会调用checkStatus,checkS...

    上山打老虎了
  • JavaScript闭包

    JavaScript的闭包 首先声明,这是一篇面向小白的博客,不过也欢迎各位大牛批评指正,谢谢。 其实关于闭包各个论坛社区里都有很多的文章来讲它,毕竟闭包是...

    IMWeb前端团队
  • JavaScript闭包

    有权访问另一个函数作用域内变量的函数都是闭包。这里 couter 函数访问了构造函数 a 里面的变量 n,所以形成了一个闭包。 再来看一段代码:

    grain先森
  • JavaScript闭包

    输入:f1 输出:function f1() //返回一个function对象的f1

    HaC
  • JavaScript闭包

    init() 创建了一个局部变量 name 和一个名为 displayName() 的函数。displayName() 是定义在 init() 里的内部函数,并...

    闲花手札
  • javascript 闭包

    在A中返回B的引用 如果一个对象不再被引用,那么这个对象就会被GC回收,否则这个对象一直会保存在内存中。

    达达前端
  • JavaScript 闭包

    全局和局部变量即便名称相同,它们也是两个不同的变量。修改其中一个,不会影响另一个的值。

    陈不成i
  • Javascript 闭包

    一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是...

    超级大帅比
  • 解密JavaScript闭包

    译者按: 从最简单的计数器开始,按照需求对代码一步步优化,我们可以领会闭包的神奇之处。

    Fundebug
  • JavaScript闭包(Closure)

    上面的代码中,函数 f2 就被包括在函数 f1 内部,这时 f1 内部的所有局部变量,对 f2 都是可见的。

    Leophen
  • javascript 闭包详解

    一、什么是匿名函数 创建一个函数并将它赋值给变量functionName,这种情况下创建的函数,即匿名函数。(函数表达式就是匿名函数) 二、闭包 1.什么是闭包...

    柴小智

扫码关注腾讯云开发者

领取腾讯云代金券