这一次,彻底搞懂闭包

简介: 这一次,彻底搞懂闭包

什么是闭包?

在了解闭包之前,我们首先需要搞懂什么是闭包,闭包指的是一个有权访问另一个函数作用域中变量的函数。

为什么需要闭包?

我们知道在JS中,变量分为全局变量和局部变量,全局变量的作用域为全局作用域,局部变量的作用域为局部作用域,我们可以在函数内部访问全局变量,但是无法在全局环境中访问函数的局部变量,闭包可以帮助我们访问到这个局部变量。

闭包的应用场景

场景一:立即执行函数

const a = 666;
(function getA(){
    console.log(a);
})()
复制代码

场景二:模拟块级作用域

for(var i = 0; i < 5; i++) {
    (function (j) {
        setTimeout(() => {
            console.log(j);
        },1000)
    })(i)
}
复制代码

场景三:封装私有变量

function Person(name) {
    this.getName = function(){
        return name
    }
}
复制代码

闭包解决了什么问题?(闭包的作用)

  1. 闭包可以缓存上级作用域,使得函数外部打破了函数作用域的束缚,可以访问函数内部的变量。
  2. 让变量的值始终保持在内存中。

闭包带来了什么问题?(闭包的缺陷)

闭包会导致函数的变量一直保存在内存中,过多的闭包会导致内存泄露。

数组的哪些方法用到了闭包?

  • 例如forEach
const arr = [1,2,3];
arr.forEach((item,index) => {
    setTimeout(() => {
        console.log(item);
    },1000)
})
复制代码

只要是符合闭包的定义,一个有权访问另一个函数作用域中变量的函数就是闭包。权威指南中说,严格意义来说JS中的函数都是闭包。

参考资料

相关文章
|
6月前
|
JavaScript 前端开发 小程序
关于闭包的7道面试题
关于闭包的7道面试题
|
5月前
|
JavaScript 前端开发
经典面试题【作用域、闭包、变量提升】,带你深入理解掌握!
经典面试题【作用域、闭包、变量提升】,带你深入理解掌握!
|
6月前
|
存储 前端开发 JavaScript
【面试题】对闭包的理解?什么是闭包?
【面试题】对闭包的理解?什么是闭包?
|
6月前
|
存储 缓存 自然语言处理
【面试题】深入理解闭包的形成过程及应用!
【面试题】深入理解闭包的形成过程及应用!
|
6月前
|
存储 自然语言处理 前端开发
【面试题】三道面试题让你掌握JavaScript中的执行上下文与作用域以及闭包
【面试题】三道面试题让你掌握JavaScript中的执行上下文与作用域以及闭包
|
安全 编译器 程序员
深入浅出闭包
深入浅出闭包
57 0
|
Web App开发 JavaScript 前端开发
应该如何理解闭包
应该如何理解闭包
应该如何理解闭包
|
自然语言处理 JavaScript 前端开发
每日一题:说说你对闭包的理解?闭包使用场景
每日一题:说说你对闭包的理解?闭包使用场景
116 0
|
开发者 Python
闭包的概念 | 学习笔记
快速学习闭包的概念
|
自然语言处理 JavaScript 前端开发
【闭包概念】关于闭包概念不同解读——你可以自己理解。
写在前面: 闭包是被讲烂的内容,但是当我不了解的情况下,看过很多教程,听过很多道理,还是无法完全理解闭包这个东西。所以想要写一篇比较详细,前端小白也能够真正理解闭包概念的干货文章,本文参考很多闭包资料,希望能真正把闭包这个东西讲清楚,喜欢的朋友可以点个赞,或者点波关注。 首先需要了解一波js变量的作用域以及变量的生存周期。 前几天我发在掘金上面了,下面是一个内容概要,墙裂推荐所有小伙伴,还是点进去学习一波,作用域这个问题可以说是闭包最为重要的内容。 里面的内容包括: 1.变量的作用域(变量的有效范围)。2.变量作用域,js高级程序设计(红宝书)中的解释。3.红宝书中的作用域链栗子(还有一个例子
196 0
【闭包概念】关于闭包概念不同解读——你可以自己理解。