讲师中心 微信公众号
AI工具推荐 视频效率加速

javascript_什么是闭包及其应用场景

陌明大大_1897

陌明大大_1897

发布时间:2025-12-02 16:53:02

|

1015人浏览过

|

来源于php中文网

原创

闭包是函数与其外部作用域变量的结合,使函数能访问并记住创建时的环境。例如,outer函数返回的inner函数保留对count的引用,即使outer已执行完毕,count仍存在。应用场景包括:1. 模拟私有变量,如createBankAccount中的balance无法被外部直接访问;2. 函数工厂,如makePower生成不同幂次的计算函数;3. 事件处理中保存正确变量值,避免var循环问题;4. 防抖函数控制频繁触发事件,如搜索请求。需注意闭包可能导致内存泄漏,避免长期持有大对象引用。掌握闭包有助于提升代码模块化与安全性。

javascript_什么是闭包及其应用场景

闭包是指一个函数能够访问并记住其外部作用域中的变量,即使这个函数在其外部作用域之外被调用。换句话说,闭包让函数可以“记住”它被创建时的环境。

闭包的核心机制

JavaScript 中函数会形成自己的作用域,内部函数可以访问外部函数的变量。当内部函数在外部函数执行结束后仍然被引用(比如作为返回值),这些外部变量依然存在,不会被垃圾回收,这就形成了闭包。

示例:
function outer() {
  let count = 0;
  return function inner() {
    count++;
    return count;
  };
}

const counter = outer();
console.log(counter()); // 1
console.log(counter()); // 2

说明:虽然 outer() 已经执行完毕,但 inner 函数仍持有对 count 的引用,因此 count 没有被销毁。

常见的应用场景

1. 实现私有变量和封装

JavaScript 在早期没有类级别的私有属性,可以通过闭包模拟私有变量。

立即学习Java免费学习笔记(深入)”;

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载
function createBankAccount(initial) {
  let balance = initial;
  return {
    deposit: (amount) => {
      balance += amount;
    },
    withdraw: (amount) => {
      if (amount <= balance) balance -= amount;
    },
    getBalance: () => balance
  };
}

const account = createBankAccount(100);
account.deposit(50);
console.log(account.getBalance()); // 150
// 外部无法直接访问 balance
2. 函数工厂(创建具有一致行为的函数)

利用闭包生成一系列功能相似但配置不同的函数。

function makePower(power) {
  return function(number) {
    return Math.pow(number, power);
  };
}

const square = makePower(2);
const cube = makePower(3);

console.log(square(4)); // 16
console.log(cube(3));   // 27
3. 事件处理与回调函数

在循环中绑定事件时,闭包可帮助保存正确的上下文变量。

for (var i = 1; i <= 3; i++) {
  (function(index) {
    setTimeout(() => {
      console.log('Item ' + index);
    }, 100);
  })(i);
}

或者使用 let 块级作用域替代闭包也可以解决,但闭包提供了更灵活的控制方式。

4. 防抖与节流函数

常用在优化频繁触发的事件(如窗口滚动、输入框搜索)。

function debounce(func, delay) {
  let timer;
  return function(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => func.apply(this, args), delay);
  };
}

const search = debounce((query) => {
  console.log('Searching for:', query);
}, 300);

// 多次调用只执行最后一次
search('a');
search('ab');
search('abc'); // 只输出这一句

需要注意的问题

  • 闭包会保留对外部变量的引用,可能导致内存占用过高,避免不必要的大对象长期驻留。
  • 在循环中误用闭包可能造成意料之外的结果(常见于使用 var 的情况)。

基本上就这些。闭包是 JavaScript 强大特性的体现,掌握它有助于写出更模块化、安全和高效的代码。不复杂但容易忽略细节。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2368

2023.11.20

go语言闭包相关教程大全
go语言闭包相关教程大全

本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

3493

2025.07.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

0

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

0

2026.09.23

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

0

2026.09.22

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

20

2026.09.22

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

0

2026.09.22

loomy官网入口地址合集
loomy官网入口地址合集

本专题汇总了 Loomy 桌面 AI 助理的官方入口地址合集及使用指南。提供 macOS 与 Windows 客户端下载 。Loomy 是讯飞推出的桌面级 AI 工作搭子,支持文件整理、数据分析、网页操作及通过飞书/钉钉远程操控电脑,助你高效完成本地办公任务 。

0

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 11.9万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn