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)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JS的闭包真的是一个老生常谈的知识点了,无奈它并不是那么好掌握,但是它又是那么重要,很多高级应用的开发都会用到闭包...
    一木_qintb阅读 2,490评论 0 1
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 10,917评论 16 88
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 3,359评论 0 0
  • 对js的广大初学者来说,闭包绝对是个难点。而且经常出现今天感觉懂了,明天就又不懂了的情况。本文就尝试从我自己的学习...
    danejahn阅读 4,023评论 0 49
  • 《你不知道的JavaScript》真的是一本好书,阅读这本书,我有多次“哦,原来是这样”的感觉,以前自以为理解了(...
    然并阮阅读 3,720评论 2 9