博主:DongJiang
码龄:7年
等级:LV.22级
内容:316
今日访问:2312
访问总量:5936
博客简介:学习与分享
博客创建时间:2018-04-12
博客主页 立即前往
赞助位
成为赞助商

什么是闭包?

来源: 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、缓存变量

缺点:容易造成内存泄漏

原文出处:
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。