递归

  递归的概念

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

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

   递归的思想

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

     应用 

  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;
      };
     })();

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

  1. JavaScript 使用闭包防止变量污染

    javaScript在多人协作时,如果定义过多的全局变量 有可能造成全局变量命名冲突,使用闭包来解决功能对变量的调用 将变量写到一个独立的空间里面 就是闭包里面 var name = "外部 ...

  2. JavaScript 使用闭包保护变量 防止污染

    使用JavaScript编写插件或团队协作时,可使用闭包来解决此类以下两个问题: 1.定义过多全局变量,可能会造成全局变量命名冲突: 2.在插件内定义变量,需要保护该变量不被轻易修改: 优点:可以把局 ...

  3. javaScript的闭包 js变量作用域

    js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...

  4. JavaScript函数表达式、闭包、模仿块级作用域、私有变量

    函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程.匿名函数,是一种强大的方式,一下总结了函数表达式的特点: 1.函数表达式不同于函数声明,函数声明要求有名字,但函数表 ...

  5. 读javascript高级程序设计03-函数表达式、闭包、私有变量

    一.函数声明和函数表达式 定义函数有两种方式:函数声明和函数表达式.它们之间一个重要的区别是函数提升. 1.函数声明会进行函数提升,所以函数调用在函数声明之前也不会报错: test(); functi ...

  6. JavaScript中是如何定义私有变量的

    前言 JavaScript并不像别的语言,能使用关键字来声明私有变量. 我了解的JavaScript能用来声明私有变量的方式有两种,一种是使用闭包,一种是使用WeakMap. 闭包 闭包的描述有很多种 ...

  7. Javascript 闭包与变量

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

  8. JavaScript 执行环境(执行上下文) 变量对象 作用域链 上下文 块级作用域 私有变量和特权方法

    总结自<高程三>第四章  理解Javascript_12_执行模型浅析   JS的执行环境与作用域  javascript高级程序第三版学习笔记[执行环境.作用域] 在javascript ...

  9. JavaScript中闭包实现的私有属性的getter()和setter()方法

    注意: 以下的输出都在浏览器的控制台中 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

随机推荐

  1. python数据结构:pandas(2)数据操作

    一.Pandas的数据操作 0.DataFrame的数据结构 1.Series索引操作 (0)Series class Series(base.IndexOpsMixin, generic.NDFra ...

  2. FreeIPA部署及基本使用

    FreeIPA是一个集成安全信息管理解决方案,FreeIPA服务器通过存储管理计算机网络安全方面所需的用户.组.主机和其他对象的数据,提供集中的身份验证.授权和账户信息.结合了Linux.Direct ...

  3. Vue的渐进式理解(笔记)

    在我看来,渐进式代表的含义是:主张最少. 每个框架都不可避免会有自己的一些特点,从而会对使用者有一定的要求,这些要求就是主张,主张有强有弱,它的强势程度会影响在业务开发中的使用方式. 比如说,Angu ...

  4. NSPredicate的使用,超级强大

    NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...]; Format: (1)比较运算符>,<,==, ...

  5. mkswap - 建立一个linux交换区

    总览 mkswap [-c] [-vN] [-f] device [size] 描述 mkswap 在一个设备上或者在一个文件里创建一个linux交换区. (该交换区创建后,必须使用 swapon 命 ...

  6. 使用vim打造python-ide

    一.前言 一直希望在linux下进行python开发,但是linux不想启动图形化界面,所以干脆直接用上了万能的VIM,用VIM打造了属于自己的python-IDE 二.插件 标签导航(tagbar和 ...

  7. Codeforces Round #426 (Div. 2) - B

    题目链接:http://codeforces.com/contest/834/problem/B 题意:一共有26个门(A-Z表示),然后现在有n个人要走的门和k个守卫.每当有人要经过某个门时,门要一 ...

  8. 客户端远程连接docker容器中的mysql 报1251错误

    1.启动容器: [root@localhost ~]# docker run -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql2.进入容器: [r ...

  9. git log 详解 以及代码量统计

    https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86% ...

  10. gremlin语言语法--学习笔记

    学习gremlin语言的目的:测试图数据,支持gremlin语句,所以必须系统学习一下!!!! 一.基础查询 g.V() 查询所有的顶点 g.V(3) 查询顶点id为3的点.字符串id的要到引号V(& ...