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/p/11978735.html

时间: 2024-10-20 20:38:57

javaScript 递归 闭包 私有变量的相关文章

javaScript的闭包 js变量作用域

js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write("a="+a); var a=90; //定义一个全局变量 function test(){ var a=123; //定义一个局部变量 } test(); document.write("a="+a); a=90; //没有var ,就会试着去找(父函数 的 a),如果找

读javascript高级编程03-函数表达式、闭包、私有变量

一.函数声明和函数表达式 定义函数有两种方式:函数声明和函数表达式.它们之间一个重要的区别是函数提升. 1.函数声明会进行函数提升,所以函数调用在函数声明之前也不会报错: test(); function test(){ alert(1); } 2.函数表达式不会进行函数提升,函数调用在函数声明之前的话会报错: test(); // test is not a function var test=function(){ alert(1); } 二.递归函数 递归函数是通过在函数内部调用自身实现的

一篇文章带你了解JavaScript中的函数表达式,递归,闭包,变量,this对象,模块作用域

作者 | Jeskson 来源 | 达达前端小酒馆 定义函数的方式: 第一种为 函数声明: 第二种为 函数表达式. 语法: function functionName(arg0, arg1, arg2) { // 函数体 } 在Firefox,Safari,Chrome和Opera有效: 就是通过这个属性可以访问到这个函数指定的名字. console.log(functionName.name); // 'functionName' 函数声明: 它的一个重要特点就是:函数声明提升,就是在执行代码

javascript中的闭包、模仿块级作用域和私有变量

闭包是指有权访问另一个函数作用域中的变量的函数.创建闭包的常见方式为:在一个函数内部创建另一个函数. "当某个函数被调用时,会创建一个执行环境(execution context)及相应的作用域链.然后,使用arguments和其他命名参数的值来初始化函数的活动对象(activation object).但在作用域链中,外部函数的活动对象始终处于第二位,外部函数的外部函数的活动对象出于第三位.....直至作用域链终点的全局执行环境." function creawteCompariso

递归、闭包、私有变量、特权方法、单例、模块模式(module pattern)

//使用命名函数表达式实现递归 var factorial = (function f(num) {     if (num <= 1) {         return 1;     } else {         return num * f(num - 1);     } }); //用作块级作用域(私有作用域)的匿名函数 (function(){     var now = new Date();     if (now.getMonth() == 0 && now.get

javascript在私有作用域中定义私有变量和私有函数 (1)

javascript没有私有成员,但是有私有变量,所有对戏那个属性都是公有的 任何在函数中定义的变量,都可以认为是私有变量,因为函数内部不能访问. 私有变量包括:函数的参数.局部变量.函数内部定义的其他函数 - 在私有作用域中定义私有变量和私有函数 function MyObject(){ //私有变量和私有函数 var privateVariable=10; function privateFunction(params) { return false } //特权方法----有权访问私有变量

Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法

一.私有变量:定义在函数内部的属性和方法称之为该函数的私有属性和方法        共有变量:在函数内部通过this创建的对象和方法称之为该函数的共有属性和方法 特权方法:通过this创建的既可以访问该函数的共有属性和方法,也可以访问该函数的私有属性和方法称之为特权方法 构造器:对象在创建的时候调用特权方法来初始化实例的属性,这个方法也称为构造器 /** * 类的内部私有属性.私有方法.特权方法.共有属性和共有方法以及构造器 * @param id * @param bookname * @pa

递归,闭包,闭包与变量

递归是在一个函数内部调用自身: function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1) } } 但是会出现问题: var fan=factorial; fun(4); factorial=null; 在调用fun(4)时,先执行上面的函数,到else内时,factorial已经被改了,所以得不到正确的结果. 使用arguments.callee代替函数就不会出错. 闭包: 创建函数时会预先

Javascript 闭包与变量

1.闭包与变量 JavaScript中的作用域链的机制引出了一个副作用,即闭包只能取得包含函数中任何变量的最后一个值.闭包所保存的是整个变量对象,而不是某个特殊的值. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function createFunctions(){      var result=new Array();              for (var i=0;i<10;i++){          result[i]=function(){