面试题:什么是闭包?

闭包是JavaScript中的一个重要概念,它允许内部函数访问并操作外部函数的变量。文章通过示例解释了闭包不一定要有`return`,但当外部需要访问内部变量时,`return`就变得重要。闭包常用于实现数据私有化,如统计函数调用次数,防止全局变量被篡改。然而,不当使用闭包可能导致内存泄漏,因为变量会长时间保持在内存中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

一、怎么理解闭包?

简单理解:闭包 = 内层函数 + 外层函数的变量

下面是一组简单的闭包代码:
function outer() {
	let count = 1
	function inner() {
		console.log(count)
    }
    inner()
}
outer()

闭包有两个注意点:

  • 闭包一定有return吗?(不一定)
  • 闭包一定会有内存泄露吗?(不一定)

先来回答第一个,例如上面那一组简单的闭包代码就没有用到return。

1、闭包什么时候用到return?

外部如果想要使用闭包的变量,则此时就需要return内层变量

		function outer() {
            let count = 1
            function inner() {
                count++
                console.log(count)
            }
            return inner
        }
        const x = outer()
        console.log(x)
        x()

闭包应用:能够实现数据的私有化。

例如:统计函数的调用次数。

1、一般写法
let count=1
function fun(){
  count++
  console.log('函数被调用了$`{count}次`')
}
fun() // 2
fun() // 3

此时的count是全局变量,很容易被修改,一旦被修改,就无法统计函数的调用次数了。

闭包写法:
javascript
function fn() {
  let count=1
  function fun(){
    count++
    console.log('函数被调用了$`{count}次`')
  }
  return fun
}
const result=fn()
result() //2
result() //3

> 这样就实现了数据私有

缺点:闭包会导致内存泄漏:

上面代码中count变量会导致内存泄漏。
result是一个全局变量,代码执行完毕不会立即销毁
而result使用fn函数
fn函数又返回fun函数
fun函数里面用到count
因此count被引用不会被回收,所以一直存在

优点:延长局部变量的生命周期、封装私有化变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值