你不知道的闭包知识

前端小学生,有错谅解

提到闭包就要理解函数、作用域。

作用域:

1.作用域有全局作用域和局部作用域。

       全局作用域在创建js文件时,环境就是全局作用域。

2.局部作用域又有函数作用域和块级作用域。

     函数作用域即函数内部环境。

     如果在代码的任何位置用大括号括起一个变量,那么该变量也将被封闭,属于块级作用域。

一、闭包的定义 

函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包closure)。来自MND

闭包就是能够读取其他函数内部变量的函数。来自百度百科。

在语法结构上,闭包通俗的来说就是函数的嵌套
function fn (){
    var a=2;
  return function (){ 
      console.log(a);

 }
}
fn();

  使得内部环境可以持有外部环境的局部变量(外部环境间接的调用内部环境的局部变量),在本质上就是连接外部函数和内部函数的桥梁。

二、闭包的特性

封闭性:外界无法访问闭包内部的数据。

持久化:对于闭包来说,在外部函数被调用之后,闭包仍然存在

一般来说函数的局部变量在函数调用执行之后就不会再被访问,但是闭包不同。

 

三、闭包有什么影响

如果不是某些特定任务需要使用闭包,不建议使用闭包,因为闭包在处理速度和内存消耗具有负面影响。

闭包内存泄漏为: key = value,key 被删除了 value 常驻内存中; 

原文地址:https://www.cnblogs.com/babilong/p/13341229.html