首页 > 编程语言 >JavaScript 中的闭包

JavaScript 中的闭包

时间:2024-09-20 20:35:14浏览次数:1  
标签:闭包 counter 函数 作用域 JavaScript 访问 init

你好,在这篇文章中,让我们学习闭包。 闭包在 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 中的闭包的详细内容,更多请关注我的其它相关文章!

标签:闭包,counter,函数,作用域,JavaScript,访问,init
From: https://www.cnblogs.com/aow054/p/18423231

相关文章

  • JavaScript 中的高阶函数
    什么是高阶函数?高阶函数是可以接受其他函数作为参数或返回函数作为值的函数。它们为我们提供了一种强大的方法来编写可应用于各种场景的可重用代码。javascript有几个常用的高阶函数,包括map()、filter()和reduce()。由于存在高阶函数,javascript通常被称为函数式编程语言。高阶......
  • JavaScript 如何在后台工作:了解其单线程性质和异步操作
    javascript是网络的支柱,为数十亿网站和应用程序提供动态客户端功能。但您有没有想过javascript是如何在后台发挥其魔力的?在这篇文章中,我们将深入研究javascript单线程本质的内部工作原理,并探索异步编程的概念。单线程是什么意思?当我们说javascript是“单线程”时,这意......
  • JavaScript 微观性能测试、历史和局限性
    我认为性能优化对许多开发人员感兴趣,因为他们更多地了解完成任务的不同方法。一些内心的声音问道:“哪种方式最好?”虽然“最佳”指标有很多变化,例如douglascrockford的2008年javascript:thegoodparts,但性能是容易获得的,因为我们可以自己测试它。然而,测试和证明性能并不总是......
  • Javascript 中的展开和休息运算符及其示例
    剩余和扩展运算符是javascript中强大的功能,允许您更有效地处理数组、对象和函数参数。它们都使用相同的语法(...),但用途不同。休息操作员(...)剩余运算符用于将所有剩余元素收集到数组中。它通常用在函数参数中来处理可变数量的参数。休息运算符示例:functionsum(......
  • JavaScript 中的异步循环:forof 与 forEach
    javascript的异步功能非常酷?,但是选择正确的循环来处理这些异步任务可能会产生很大的不同。让我们用一点乐趣来分解for...of和foreach之间的区别?1。带有异步函数的for...of循环将for...of循环想象为您超级勤奋的朋友,他耐心地等待您完成一项任务,然后再开始下一项任务。......
  • JavaScript 中的提升
    什么是javascript提升?提升是指javascript中在执行之前进行声明的过程。首先处理变量和函数声明。因此,即使变量在声明之前被引用,也不会导致错误,而是返回undefined。对于函数声明,整个函数被提升,这意味着它可以在代码中定义之前使用。此过程在执行开始之前将声明放入堆栈中。......
  • JavaScript 中的数组分组(4)
    JavaScript中的数组分组(2024)数组分组在JavaScript中并不是什么新鲜事。数组分组是JavaScript中的一项新功能,可帮助开发人员根据特定特征将数组中的元素组织成组。这使得查找和使用数据变得更加容易。现在的问题是它是如何运作的?好吧,在最新和现代的方法出现之前,开发人员将......
  • JavaScript 中的星空可视化
    这是一个简单、直接的可视化实现,让人想起经典的Windows95星空屏幕保护程序。它也是交互式的:您可以触摸屏幕或使用加速计来影响运动的方向。这就是它的工作原理:创建一堆粒子(100),每个粒子处于随机位置。每一帧,将每个粒子进一步远离中心*。粒子距离中心越远,它就会变得越明显。这......
  • JavaScript 中的正则表达式
    没有多少人谈论正则表达式,尽管它们对于文本操作和数据验证非常有用。它们提供了一种强大的方法来搜索、匹配和替换字符串中的模式。在JavaScript中,RegExp是一个可以有效地用来查找和操作这些模式的对象,无论您是在验证电子邮件、格式化电话号码还是解析日志。正则表达式甚至可......
  • JavaScript 中 new Function() 和 new function() 的区别
    javascript确实很灵活,但它也带来了一些混乱。例如,你可以使用多种方式来做同一件事情,比如创建函数、对象等。那么标题中提到的两者有什么区别呢?newfunction是另一种创建函数的方式,其语法:constfunc=newfunction([arg1,arg2,...argn],functionbody);一个简单的例子:constsu......