JavaScript中的闭包是一个强大的概念,它允许函数在其定义范围之外被调用,仍然能够访问其词法环境(包括函数和变量),使用场景:
一、数据封装和私有变量
闭包可以用来创建私有变量。通过在函数内部定义另外一个函数,并将内部函数返回,可以回,并将内部函数返回,可以实现只有通过特定的公开方法才能访问的和操作的私有变量的效果。具有隐藏变量,防止全局变量的污染。
在上面的例子中对比一下,假如说在全局定义age,程序的其他地方可能还会处理age,会有被其他地方更改的风险。相反使用闭包之后就不会,涉及到一个变成思想,把处理数据的事件放在自己身上,其他地方需要修改的的话,需要调用我自己的方法才能修改,主动权在我自己身上(后续会说明)。
二、高阶函数和回调函数
高阶函数呢,简单来说就是把一个函数作为另一个函数的返回值。
回调函数的话,简单来说就是把函数做为参数传递;回调函数,在之前的异步执行的时候经常用到,可以解决回调地域问题,在没有Promise对象和 async/await(ES6)之前,通常使用回调函数的方法来处理
三、实现函数装饰器
闭包可以用于修改或增强函数的行为,而不需要修改函数的源代码。这通常用于实现装饰器模式,即在不改变现有类结构的情况下,动态地给对象添加一些职责。
像这个,在参数a的地方可以在needFn函数执行之前,进行扩展操作,不明白的可以评论告诉我哈。
四、实现柯里化
柯里化是一种将使用多个参数的函数转换成一系列使用一个参数的函数的技术。每个连续调用的函数都返回一个新函数,直到最后调用返回所需的结果。闭包是实现柯里化的关键。
这些只是闭包在JavaScript中的一些常见应用场景。实际上,闭包的功能强大且灵活,可以根据具体需求在各种场景中发挥作用。