• 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;
          };
         })();
  • 相关阅读:
    JournalNode的作用
    mysql57重新安装后无法再次启动mysql57服务“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动。”--解决方法
    oracle基础语法
    MYSQL 8.0.11 安装过程及 Navicat 链接时遇到的问题
    MySQL 字符串函数:字符串截取
    java基础总结
    mysql 排名
    mysql——查询重复数据,及删除重复数据只保留一条数据
    松软科技课堂:jQuery 效果
    松软科技课堂:jQuery 效果
  • 原文地址:https://www.cnblogs.com/nmxs/p/11978735.html
Copyright © 2020-2023  润新知