专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

JS面试题突破:什么是闭包?(闭包 js)

ins518 2025-06-23 19:44:15 技术文章 7 ℃ 0 评论

闭包是指在函数内部定义的函数可以访问外部函数作用域中的变量和参数,即使外部函数已经返回,这些内部的函数仍然可以访问那些变量和参数。在JavaScript中,每次创建函数时都会创建一个作用域和一个闭包,因此闭包是一种强大的功能,可以用于实现很多有用的设计模式和编程技巧。

以下是一些使用闭包的JS案例:

  1. 实现私有变量 使用闭包可以实现私有变量,即在函数中定义的变量只能由该函数内部访问。例如:
function counter() {
  let count = 0;
  return function() {
    count++;
    console.log(count);
  }
}

const c = counter();
c(); // 1
c(); // 2
c(); // 3

在这个例子中,count 变量是在 counter 函数内部定义的,外部函数无法直接访问它。但是,返回的函数却可以访问并更新它的值,因此它可以用作计数器。

  1. 避免内存泄漏 在JavaScript中,当一个函数执行完毕后,其局部变量和参数通常会被销毁,以便回收内存。但是,如果返回的函数形成了闭包,那么它仍然可以访问外部函数的变量和参数,并且这些变量和参数将一直存在于内存中,直到闭包被销毁。因此,使用闭包时需要注意内存泄漏的问题。例如:
function createButton() {
  const button = document.createElement('button');
  document.body.appendChild(button);
  button.addEventListener('click', function() {
    console.log('Button clicked');
  });
}

在这个例子中,返回的函数形成了一个闭包,因此它仍然可以访问 button 变量和addEventListener参数,这会导致这些变量和参数一直存在于内存中,直到页面被卸载。为了避免这种内存泄漏,可以在返回的函数中使用 removeEventListener 来删除事件处理程序。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表