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

Posted chorkiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建议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调用返回.闭包不会因为函数环境的注销而消失,会始终存在.

以上是关于建议17:使用闭包跨域开发的主要内容,如果未能解决你的问题,请参考以下文章

前端性能优化垃圾回收,闭包,跨域

跨域访问方法介绍--使用片段识别符传值

Spark闭包与序列化

jQuery使用经验建议

vscode代码片段建议bug

编写高质量代码改善C#程序的157个建议——建议38:小心闭包中的陷阱