什么是闭包?闭包形成的必要条件?

闭包是JavaScript中的核心概念,它结合了函数与词法环境,允许内部函数访问并保留对外部函数作用域的引用。闭包的生成需要函数嵌套、内部函数引用外部变量,并且内部函数持续存在。在给定的例子中,`f1`返回内部函数`f2`,`f2`保存了对外部变量`n`的引用,形成闭包。这种机制在内存管理和函数复用中扮演重要角色,避免了变量过早被垃圾回收。
摘要由CSDN通过智能技术生成

什么是闭包?

MDN:闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包会随着函数的创建而被同时创建;
闭包是由函数以及声明该函数的词法环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量;
简单来说:就是函数嵌套使用,内部函数需要访问外部函数的变量,若内部函数始终存在于内存中,由于内部函数变量依赖于外部函数的原因,就会使得外部函数的数据不会被垃圾回收机制回收。

闭包的生成有三个必要条件?

1.函数嵌套
2.内部函数引用了外部函数的属性或函数
3.参数和变量不会被回收
待定条件:外部函数return内部函数

创建闭包最常见方式,就是在一个函数内部创建另一个函数:

function f1() {
  var n = 999;
  nAdd = function () { n += 1 }
  function f2() {
    console.log(n);
  }
  return f2;
}
var result = f1();
result(); // 999
nAdd();
result(); // 1000

f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值