JavaScript 中的闭包
你好,
在这篇文章中,让我们学习闭包。
闭包在 javascript 中至关重要,因为它们允许函数从其父作用域访问变量,即使在父函数关闭之后也是如此。这对于需要随着时间的推移记住数据的函数至关重要,例如回调函数或维护状态。这里要记住的一点是父作用域中未使用的变量将被垃圾收集。
定义:
闭包是捆绑在一起(封闭)的函数及其周围状态(词法环境)的引用的组合。换句话说,闭包让函数可以访问其外部作用域。在 javascript 中,每次创建函数时都会创建闭包。
基本上闭包可以访问:
- 他们自己的范围
- 外部函数的范围
- 全球范围
让我们通过例子来理解。
示例
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 中的闭包的详细内容,更多请关注其它相关文章!