什么是闭包?

标签:2024-05-15 23:11:34

闭包是指存在自由变量的函数!

1)是一个函数

2)函数里有一个自由变量,该变量不是在当前函数里面声明。

在A作用域中使用的变量a,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,a就是一个自由变量。如下代码

示例1:

var a = 10
function fn(){
var b = 20
console.log(a + b)
}

示例2:

function a(x, y){
  console.log(x, y) //在这里,x和y都不是自由变量
  function b(){
      console.log(x, y) //但在这个内部函数b中,x和y相对于b都是自由变量,而函数a的作用域则是环境。
  }
  //无论b最终是否会作为返回值被函数a返回,b本身都已经形成了闭包。
}

示例3:

函数可以记住并访问所在的词法作用域

function a () {
  let value = 2;
  function b () {
      return value += 2; // 对value局部变量进行累加
  }
  return b;
}
const fn = a();
console.log(fn());    // 4
console.log(fn());    // 6
console.log(fn());    // 8

优点:1、避免全局变量污染。2、缓存变量

缺点:容易造成内存泄漏

原文出处:http://www.dongblog.com/notes/50.html
来源:博客网 转载请注明出处!

活跃用户

南笙北执
Ta还没有签名
鸩羽千夜
Ta还没有签名
繁星之下
Ta还没有签名
Alone Alive
Ta还没有签名

友情链接


Warning: Smarty error: unable to read resource: "../../../templates/default/./common/foot/footer_index.htm" in /usr/home/hyu3925200001/htdocs/common/smarty/Smarty.class.php on line 1093

Warning: Smarty error: unable to read resource: "../../../templates/default/./common/foot/footer_index.htm" in /usr/home/hyu3925200001/htdocs/common/smarty/Smarty.class.php on line 1093