透彻的解释: A closure is a special kind of object that combines two things: a function, and the environment in which that function was created

之前的解释:一个func将它的innerFunc作为返回值,那么这个innerFunc被称之为闭包

两者都对,只是解释的角度不同和深度不同,前者更接近本质,而后者更接近形式

可以比较文艺地说:闭包是位爱国人士,无论他走到哪里,都不会忘记养育他的祖国大地

比如这样

var a=1;
var f1=function(){
  var a=2;
  return function(){

    console.log(this);

    console.log(this.a);

    console.log(a);
  }
}

f1()() // window 1 2

这时this指向的是window,自然this.a是1,但a却依然是2

也就是说

当这个内部匿名函数,外出游历,成为闭包

他并没有忘记家乡的一草一木(f1里的局部变量a)

一切都存在在他深深的脑海里

并且不为外人所知

转载于:https://www.cnblogs.com/AlexNull/p/4791480.html

js:如何文艺地理解闭包相关推荐

  1. JS面向对象--你真的理解闭包了吗?

    JS中的闭包,可能在实际开发中我们用的很少,但是面试的时候是必问的. 所以今儿个总结一下什么是闭包. 首先,我们定义一个变量.会分为两种情况,1是定义在全局中,我们关闭程序的时候变量会从内存中释放.2 ...

  2. ES6之let(理解闭包)和const命令

    ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...

  3. js执行环境作用域和闭包_JavaScript中执行上下文,提升,作用域和闭包的终极指南

    js执行环境作用域和闭包 It may seem surprising, but in my opinion the most important and fundamental concept to ...

  4. Js模块化开发的理解

    Js模块化开发的理解 模块化是一个语言发展的必经之路,其能够帮助开发者拆分和组织代码,随着前端技术的发展,前端编写的代码量也越来越大,就需要对代码有很好的管理,而模块化能够帮助开发者解决命名冲突.管理 ...

  5. js回调函数的理解(轉)

    js回调函数(callback)理解Mark!讲之前说一句function say(){alert(,,,,,,,,)}var say=function (){alert(,,,,,,,)}var s ...

  6. JavaScript——以简单的方式理解闭包

    闭包,在一开始接触JavaScript的时候就听说过.首先明确一点,它理解起来确实不复杂,而且它也非常好用.那我们去理解闭包之前,要有什么基础呢?我个人认为最重要的便是作用域(lexical scop ...

  7. [转][Python小记] 通俗的理解闭包 闭包能帮我们做什么?

    热身 首先给出闭包函数的必要条件: 闭包函数必须返回一个函数对象 闭包函数返回的那个函数必须引用外部变量(一般不能是全局变量),而返回的那个函数内部不一定要return 几个典型的闭包例子: # EN ...

  8. JS之经典for循环闭包问题解决方法

    JS之经典for循环闭包问题解决方法 参考文章: (1)JS之经典for循环闭包问题解决方法 (2)https://www.cnblogs.com/zhumingyong/p/8994636.html ...

  9. 我我我我终于理解闭包了,哈哈哈哈(仰天长啸)(JavaScript闭包理解)

    想要理解闭包.首先得了解JavaScript中的三个东西. 1,函数内部可以访问的范围. 就是说,函数内部能访问,自身内部以及自身外层的变量.(这个很好理解,大部分语言都是如此) 如: var a = ...

最新文章

  1. 如何快速清空 Linux 中的大文件
  2. 提高项目开发效率之--会议室墙的进度表
  3. 4G最快网速相当于30M宽带
  4. [转] 有什么郁闷的就看看这驴!
  5. Creating Your First Blockchain with Java. Part 1.
  6. 取两个日期相差几年_干货~44个最常用的日期和时间类函数组合
  7. 一建机电实务教材电子版_必背!一建《机电实务》高频考点,每日一背
  8. pytorch实现Dropout与正则化防止过拟合
  9. 5 高可靠,构建RabbitMQ集群架构
  10. 安卓开发由一个APP拉起另一个APP的方法总结
  11. 小心SAP环境中的8大安全错误!快来对照、改正!
  12. idea快捷键汇总mac_IntelliJ IDEA for MAC 快捷键设置汇总
  13. Threejs javascript 3D建模 框架
  14. 计算机网络在办公自动化的应用,浅析计算机网络在办公自动化中的作用
  15. 十代主板改win7_技嘉B460主板UEFI+GPT装win7|10代CPU装win7 Bios设置
  16. icloud显示账户详情不可用_iCloud提示账户详情不可用怎么办 iphone提示账户详情不可用的解决方法...
  17. VON矿链资本的技术含量内幕是什么?尊皇社区为你揭秘!
  18. 常用正则表达式,常用表单验证javascript代码(转)
  19. js 验证身份证号,根据身份证获取出生年月/性别
  20. Java——常用开发工具

热门文章

  1. html盒子标准模型,CSS——(二)盒子模型与标准流
  2. 视频号扩展链接助手小程序功能模块源码v1.5.0
  3. 如何防止WordPress博客内容被恶意复制的教程
  4. 发布一个免费漂亮的仿Outlook风格、支持换肤的通用界面框架
  5. 电脑引起“心理死亡”
  6. 一步步教你在Win2003下安装IIS组件
  7. SVG矢量绘图 path路径详解(贝塞尔曲线及平滑)
  8. 如何保持网站重建前已有的排名
  9. 制作HTML类型的email邮件 Background Images and CSS in HTML Email
  10. FCKeditor + smarty