JavaScript 中的闭包

javascript 中的闭包

你好,

在这篇文章中,让我们学习闭包

闭包在 javascript 中至关重要,因为它们允许函数从其父作用域访问变量,即使在父函数关闭之后也是如此。这对于需要随着时间的推移记住数据的函数至关重要,例如回调函数或维护状态。这里要记住的一点是父作用域中未使用的变量将被垃圾收集。

定义:
闭包是捆绑在一起(封闭)的函数及其周围状态(词法环境)的引用的组合。换句话说,闭包让函数可以访问其外部作用域。在 javascript 中,每次创建函数时都会创建闭包。

基本上闭包可以访问:

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

他们自己的范围外部函数的范围全球范围

奖励积分
词法作用域:内部函数可以访问外部作用域中的变量。

让我们通过例子来理解。

示例

q> 编写一个函数createcounter。它应该接受一个初始整数 init。它应该返回一个具有三个函数的对象。

这三个函数是:

increment() 将当前值增加 1,然后返回。
decrement() 将当前值减 1 然后返回。
reset() 将当前值设置为 init,然后返回它。

请参阅下面的注释代码以获取 init = 5 案例示例。

解决方案

var createCounter = function(init) {    const INITIAL_VALUE = init;    return {        increment: () => ++init,        decrement: () => --init,        reset: () => init=INITIAL_VALUE,    }};/** * const counter = createCounter(5) * counter.increment(); // 6 * counter.reset(); // 5 * counter.decrement(); // 4 */

登录后复制

说明:

在其词法范围内捕获 init 变量。即使在createcounter执行完成后也可以返回可以访问和修改init的方法。创建只能通过返回的方法访问的私有、持久状态 (init)。允许创建多个独立的计数器,每个计数器都有自己的封装状态。

如果您有任何疑问或建议,请随时在评论中添加。

这个问题取自leetcode。链接

最后请记住,脚本中的每个闭包都可以访问全局声明的变量。

我希望你现在对闭包有了很好的理解。感谢您的阅读

以上就是JavaScript 中的闭包的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2669231.html

(0)
上一篇 2025年3月7日 12:42:04
下一篇 2025年2月25日 22:08:35

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript 中的提升

    什么是 javascript 提升? 提升是指 javascript 中在执行之前进行声明的过程。首先处理变量和函数声明。因此,即使变量在声明之前被引用,也不会导致错误,而是返回 undefined。对于函数声明,整个函数被提升,这意味着它…

    2025年3月7日
    200
  • 了解 JavaScript 中的变量:初学者指南

    理解 javascript 中的变量:初学者指南 欢迎回到我们的 javascript 世界之旅!在这篇博文中,我们将深入探讨编程中的基本概念之一:变量。变量对于在 javascript 程序中存储和操作数据至关重要。我们将介绍什么是变量、…

    2025年3月7日
    200
  • JavaScript 中的临时死区 (TDZ) 和提升:

    JavaScript 中的临时死区 (TDZ) 和提升: 临时死区(TDZ):临时死区是指进入作用域(如块或函数)和声明变量之间的时间段。在此区域中,任何访问变量的尝试都将导致引用错误。 TDZ 存在于初始化之前使用 let、const 和…

    2025年3月7日
    200
  • 执行上下文和调用堆栈

    为顶级代码创建全局执行上下文,即不在任何 fn 内的代码。因此,首先执行 fn 之外的代码。fn-decln/exprsn 的 fn 主体内的代码仅在调用时执行。 执行上下文(ec) 一段js执行的环境。存储一些要执行的代码的所有必要信息,…

    2025年3月7日
    200
  • 适用于您日常工作流程的 ESEST 提示、技巧、最佳实践和代码片段示例

    es6 (ecmascript 2015) 对 javascript 进行了重大改革,引入了许多新功能,可以简化您的编码并提高项目的整体质量。 在这篇文章中,我们将介绍一些es2015 提示、技巧、最佳实践,并提供代码片段示例来增强您的日常…

    2025年3月7日
    200
  • 起重面试问答

    1. javascript 中什么是提升? 答案: 提升是执行上下文创建阶段为变量和函数分配内存的过程。在此过程中,为变量分配了内存,并为变量分配了值 undefined。对于函数,整个函数定义存储在内存中的特定地址,并且对其的引用放置在该…

    2025年3月7日
    200
  • TypeScript 中的 TSyringe 和依赖注入

    我不太喜欢像 nestjs 这样的大型框架;我一直喜欢以我想要的方式构建我的软件的自由,以及我以轻量级方式决定的结构。但在测试 nestjs 时我喜欢的是依赖注入。 依赖注入(di)是一种设计模式,它允许我们通过消除创建和管理类依赖关系的责…

    2025年3月7日
    200
  • JavaScript 中的作用域和提升 – 全面解释

    javascript 中的作用域 javascript 中的范围是指代码中可以使用或查看某些变量或函数的区域。它定义了您可以在何处访问特定值或操作。 javascript 中的作用域主要有两种类型: 全球范围 本地作用域(函数和块作用域) …

    2025年3月7日
    200
  • Factory Design Pattern in JavaScript

    工厂设计模式是一种创建型设计模式,它提供了一种创建对象的方法,而无需指定将创建的对象的确切类。它涉及创建一个工厂方法,该方法根据输入或配置决定要实例化哪个类。当我们需要将所有对象创建及其业务逻辑保留在一个地方时使用它。 工厂设计模式的主要优…

    2025年3月7日
    200
  • 了解 JavaScript 中的临时死区 (TDZ)

    简介:应对 javascript 的临时死区挑战 在使用 javascript 时,开发人员经常面临由变量作用域问题引起的棘手错误,特别是在使用 let 和 const 进行声明时。这些问题通常是由于临时死区 (tdz) 引起的,这个概念尚…

    2025年3月7日
    200

发表回复

登录后才能评论