这一次,彻底搞懂闭包-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

这一次,彻底搞懂闭包

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

什么是闭包?

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

为什么需要闭包?

我们知道在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中的函数都是闭包。

参考资料

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章