【问题标题】:Can a callback function be a closure?回调函数可以是闭包吗?
【发布时间】:2020-09-02 06:41:05
【问题描述】:
getTotal() {
    let total = 0;
    this.results.forEach(result => {
        total += result.marks;
    })
    return total;
}

forEach 方法内部的回调函数是否是一个闭包,因为它正在访问其范围之外的总变量?

【问题讨论】:

  • 嗯,这取决于你如何定义“闭包”。从某种意义上说,这确实证明了闭包,因为那些内部回调函数修改了外部变量result,但在更深的意义上我会说不,因为没有办法从getTotal 函数外部调用这些回调。因此,一旦它定义的函数完成执行,就无法观察total,而后者至少对我来说是闭包 m 的显着特征

标签: javascript callback closures


【解决方案1】:

是的,是的。使用reduce 进行折叠:

 return this.results.reduce((total, result) => total + result.marks)

【讨论】:

    【解决方案2】:

    是的,这是关闭。您的anonymous cb 函数已在与total 变量相同的范围内声明,并且anonymous cb 有一个隐式[[Environment]] 属性,其中存储了您的total 变量。 在这里检查。 https://javascript.info/closure

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-29
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 2015-05-22
      • 1970-01-01
      相关资源
      最近更新 更多