JavaScript的闭包

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域外执行。
当某个函数持有对定义该函数的作用域(及其外部作用域)的引用,使得该作用域一直存活,这个引用就叫闭包。
eg:回调函数

var a=2;
(function IIFE(){
  console.log(a);
})();

该IIFE是闭包吗?
存在争议,按之前定义来讲不属于,因为该函数实在它定义的作用域中被执行,a变量是通过普通的词法作用域查找而非闭包发现的。

常用循环调用异步函数方法

for(var i=1;i<=5;i++){
  (function(j){
    setTimeout(function timer(){
      console.log(i);
    },i*1000)
  })(i);
}

还可以依赖let在for循环中的特殊行为:变量在循环过程中每次迭代都会被声明。

for(let i=1;i<=5;i++){
  setTimeout(function timer(){
    console.log(i);
  },i*1000)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容