JS中的闭包

高阶函数的两个特性

  • 高阶函数除了可以接受函数作为参数外
  • 还可以把函数作为结果值返回。

闭包函数的返回值也是函数


function lazy_sum(arr) {
    var sum = function () {
        return arr.reduce(function (x, y) {
            return x + y;
        });
    }
    return sum;
}

console.log()
let lazySum = lazy_sum(arr=[1,2,3,4,5]);
console.log(lazy_sum);
console.log(lazy_sum());

console.log(lazySum);
console.log(lazySum());

运行结果


[Function: lazy_sum]
[Function: sum]
[Function: sum]
15

Process finished with exit code 0

思考

  • 闭包函数的返回值也是函数的引用
  • 如果真正的想要执行函数
  • 必须将函数进行调用才行

闭包函数的作用

azy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力

知识点总结

闭包(Closure)是 JavaScript 中一个重要且强大的概念,它允许函数访问并操作其外部函数作用域(父级作用域)的变量,即使在外部函数已经执行完毕的情况下也可以。

简单来说,闭包是一个函数和其相关的变量的组合,它们共同形成了一个闭合的作用域环境。

下面是一个简单的例子:

function outerFunction() {
  let outerVariable = 10;

  function innerFunction() {
    console.log(outerVariable); // 在内部函数中访问外部函数的变量
  }

  return innerFunction;
}

const closureExample = outerFunction();
closureExample(); // 输出 10

在这个例子中,outerFunction 是一个外部函数,它包含一个局部变量 outerVariable 和一个内部函数 innerFunctioninnerFunction 可以访问 outerVariable,即使在 outerFunction 执行完毕后也可以。

闭包的关键特点:

  1. 函数嵌套:内部函数嵌套在外部函数中。
  2. 内部函数引用外部变量:内部函数可以访问外部函数的变量,即使外部函数已经执行完毕。
  3. 返回内部函数:通常,外部函数会返回内部函数,从而使其保持在作用域中。

闭包的应用场景:

  1. 模块模式:通过闭包可以创建私有变量,使其不受外部访问。

  2. 函数工厂:可以用闭包来创建一个可以生成特定类型的函数的工厂。

  3. 事件处理程序:在事件处理程序中,闭包可以用来保留事件监听器的状态信息。

  4. 异步操作:在异步代码中,可以使用闭包来保留一些数据,以便在回调函数中使用。

  5. 避免全局污染:通过使用闭包,可以减少全局命名空间的污染。

请注意,过度使用闭包可能会导致内存泄漏,因为闭包会保持外部作用域的引用。因此,在使用闭包时,需要小心确保不会无意中保留大量不必要的内存。

总的来说,闭包是 JavaScript 中一个非常强大且灵活的特性,能够解决许多问题,但也需要谨慎使用以避免潜在的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王摇摆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值