• 建议17:使用闭包跨域开发


      闭包是指词法表示包括不必计算的变量的函数,闭包函数能够使用函数外定义的变量.

      闭包结构有以喜爱盎格比较鲜明的特性:

      (1)封闭性

      外界无法访问闭包内部的数据,如果在比包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口.

      (2)持久性

      对于一般函数来说,在调用完毕后,系统会自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保持存在系统中,闭包中的数据依然存在,从而实现对数据的持久使用.

      下面以一个经典的闭包示例来演示:

    function f(x){      //外部函数
      var a = x;       //外部函数的局部变量,传参 
      var b = function(){  //内部函数
        return a       //访问外部函数中的局部变量
      }
      a++;           //访问后,动态更新外部函数的变量
      return b        //内部函数
    }
    var c = f(5)       //调用外部函数,并赋值
    console.log(c());      //6 调用内部函数,返回外部函数更新后得值6

    如果没有闭包函数的作用,那怎么种种数据寄存和传递就无法得以实现,例如

    function f(x){
      var a = x;
      var b = a;    //直接把局部变量的值传递给局部变量b
      a++
      return b;     //局部变量b
    }
    var c = f(5)
    console.log(c); //5

      闭包在程序开发中具有重要的价值.例如:使用闭包结构能够跟踪动态环境中数据的实时变化,并即时存储.

    function f(){
      var a = 1;
      var b = function(){
        return a
      }
      a++
      return b
    }
    var c = f()
    console.log(c());   //返回2,而不是1

      上面示例,闭包中变量b存储的值并不是对上面行变量a的值的简单复制,继续以用外部函数定义的局部变量中的值,直到外部函数f调用返回.闭包不会因为函数环境的注销而消失,会始终存在.

  • 相关阅读:
    二分查找
    合并两个或多个有序链表
    前缀和
    田忌赛马
    小根堆实现
    汉化破解:ASPack 2.12 > Alexey Solodovnikov Dump
    EXT是一款强大的AJAX框架
    var TempViewPanel = Ext
    【Azure 事件中心】如何查看事件中心的消息中具体报文内容呢?
    【Azure Developer】Azure Logic App 示例: 解析 Request Body 的 JSON 的表达式? triggerBody()?
  • 原文地址:https://www.cnblogs.com/chorkiu/p/12120933.html
Copyright © 2020-2023  润新知