闭包

2018-09-28  本文已影响0人  js好难学啊

闭包

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
上一篇下一篇

猜你喜欢

热点阅读