闭包

闭包

1. 两个经典例子

1.1 First

for (var i = 0; i < 5; i++) {
    setTimeout(function () {
        console.log(i);
    }, 1000);
}

// 结果是 5 5 5 5 5

es6之后这个经典问题将var转换为let就可以轻松解决。
原本之前可以创建一个闭包,将i作为参数传递给自执行函数像这个样子

for (var i: number = 0; i < 5; i++) {
  (function (x) {
    setTimeout(() => {
      console.log(x)
    }, 1000)
  })(i)
}
// 结果是 0 1 2 3 4

1.2 Second

const fn = x => {
  return y => {
    return x + y
  }
}

const a = fn(1) // 此时的a就是一个闭包
console.log(a(2)) //结果是3
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容