首页 > 其他分享 >js闭包

js闭包

时间:2024-11-06 15:46:56浏览次数:2  
标签:闭包 count createCounter 函数 作用域 js 变量

闭包(closure)是 JavaScript 中的一个重要概念,它指的是一个函数可以记住它被创建时的词法作用域(即它所处的变量作用域),即使这个函数在这个作用域之外执行时,依然能够访问该作用域内的变量。闭包让你可以创建并保存私有变量和方法,同时避免全局变量的污染。

闭包的核心原理

在 JavaScript 中,函数的作用域是在函数定义时(而不是在执行时)确定的。也就是说,函数“记住”了它定义时的环境。这种特性让函数在执行时,即便已经超出了原来的作用域,仍然可以访问和操作原本在作用域中的变量。

闭包的应用场景

  1. 数据封装:可以使用闭包创建私有变量,防止数据被外部修改。
  2. 延迟执行:闭包常用在事件处理器、定时器等需要延迟执行的地方。
  3. 函数工厂:可以生成带有特定私有变量的函数,每个函数可以保持自己的独立状态。

闭包示例

function createCounter() {
  let count = 0; // 闭包中的私有变量

  return function() {
    count += 1;
    return count;
  };
}

const counter1 = createCounter();
console.log(counter1()); // 输出 1
console.log(counter1()); // 输出 2

const counter2 = createCounter();
console.log(counter2()); // 输出 1(counter2 是独立的)

在这个例子中,createCounter 函数返回了一个内部函数,这个内部函数形成了一个闭包,它可以访问并更新外层的 count 变量。这样,count 就被封装在 createCounter 的作用域中,外部无法直接访问或修改它,只能通过 counter1() 这样的调用来操作 count

关键点总结

  • 闭包可以访问函数定义时的词法作用域,即使该函数在外部被调用。
  • 通过闭包可以保护变量,防止全局污染,便于数据封装。
  • 闭包也有可能引发内存泄漏,因为被引用的变量在作用域外仍然存在,不会被垃圾回收器释放。

标签:闭包,count,createCounter,函数,作用域,js,变量
From: https://www.cnblogs.com/94pm/p/18530374

相关文章

  • Nuxt.js 应用中的 prerender:routes 事件钩子详解
    title:Nuxt.js应用中的prerender:routes事件钩子详解date:2024/11/6updated:2024/11/6author:cmdragonexcerpt:prerender:routes是Nuxt.js中的一个钩子,允许开发者在预渲染过程中扩展要预渲染的路由列表。这对于静态站点生成(SSG)尤为重要,开发者可以根据需求添加额......
  • Mac系统安装node.js及环境配置
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18530322➤如果链接不是为敢技术的博客园地址,则可能......
  • Js Bom&定时器、事件循环
    BOM:浏览器对象模型BOM为我们提供了一组对象,通过这组对象可以完成对浏览器的各种操作BOM对象:Window——代表浏览器窗口(全局对象)Navigator——浏览器的对象(可以用来识别浏览器)Location——浏览器的地址栏信息History——浏览器的历史记录(控制浏览器前进后退)......
  • js内存泄漏几种方式及如何避免、内存溢出
    https://blog.csdn.net/Judy_qiudie/article/details/82845692 一、什么是内存泄漏(memoryleak)?参考阮一峰老师博客:http://www.ruanyifeng.com/blog/2017/04/memory-leak.html不再用到的内存,没有及时释放,就叫做内存泄漏(memoryleak)。程序的运行需要内存。只要程序提出要求,操......
  • 深入理解JavaScript中的闭包
    写在前面在JavaScript中,闭包是一个强大的概念,它允许我们创建私有变量和函数,并在需要时访问它们。虽然闭包可能看起来有些神秘,但实际上它是基于JavaScript的词法作用域和函数的特性。理解闭包对于编写高效、可维护的JavaScript代码至关重要。什么是闭包?闭包是指一个函数能......
  • 双token无感刷新nodejs+vue3(保姆级教程)
    什么是双Token无感刷新?双Token无感刷新机制使用两个不同的token来管理用户的身份验证和会话。通常情况下,这两个token是:访问Token(AccessToken):用于访问受保护的资源,通常具有较短的有效期(如15分钟到1小时)。当用户进行API请求时,附带此token以证明其身份。刷......
  • Node.js-增强 API 安全性和性能优化
    ​......
  • node.js毕设中国传统文化服饰交流平台(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于中国传统文化服饰交流平台的研究,现有研究主要集中在传统文化服饰的历史、艺术价值等方面,如在传统服饰的审美意蕴研究中,多是从单一的美学角度探讨其......
  • node.js毕设文物藏品管理系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于文物藏品管理系统的研究,现有研究主要集中在藏品的数字化管理、RFID技术在藏品管理中的应用等方面。例如,一些研究关注了如何利用RFID技术实现藏品的......
  • node.js动漫论坛-计算机毕业设计源码09947
    摘 要随着移动互联网的飞速发展,智能手机和移动互联网已经成为人们日常生活中不可或缺的一部分。在这样的背景下,微信小程序应运而生,凭借其无需下载安装、即用即走的特点,迅速成为连接用户与服务的桥梁。动漫作为一种深受年轻人喜爱的文化形式,拥有庞大的粉丝群体和广阔的市场......