博主:DongJiang
码龄:7年
等级:
文章:631
访问:52336
博客简介:DongJiang的博客
博客创建时间:2018-04-12
给博主送颗小红心
1002
后台管理系统: 进入后台

友情链接

2024年前端JS面试题

来源: 2024-05-12 16:36:44

什么是闭包?

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

在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、缓存变量

缺点:容易造成内存泄漏

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