想要理解闭包。首先得了解JavaScript中的三个东西。

1,函数内部可以访问的范围。

就是说,函数内部能访问,自身内部以及自身外层的变量。(这个很好理解,大部分语言都是如此)

如:

var a = 1;
function myF(){//这里可以访问a
}

函数f1内部有函数f2的话。

var a = 1;
function f1{var b = 2;function f2(){//这里可以访问a和b}
}

2,函数自我调用

函数在定义的同时调用自我一次,对外界不可见。外界不能再调用它了。

(funciton(){//要运行的代码
})();// 带参数的自我调用函数
(function(a,b){//...
})(1,2)

3,JavaScript中,函数Funciton也是对象Object,可以作为返回值

function f1(){return f2(){};
}var a = f1();//这样a就等于函数f1的返回值即函数f2了//我们要运行函数f2,就可以这样:
a();

综上所述,我们想要一个变量,这个变量不能直接被访问,只能通过特定函数访问到。(有点类似于Java自私变量,只能通过get/set方法访问)。

我就需要一个自调用函数,在这个自调用函数中声明(以及初始化)这个变量x。然后再在这个自调用函数中返回一个处理变量x的函数(简称f2吧)。把自调用函数返回的函数f2返回给变量a。然后就可以通过a(),一直调用函数f2,而函数f2作为自调用函数的内部函数,可以一直访问处理自调用函数的变量x。这就是所谓的闭包。

var a = (function(){var x = 0;return function (){return x += 1;}
})();a();    // 返回1
a();    // 返回2
a();    // 返回3

闭包是一种保护私有变量的机制。防止外界通过赋值直接去更改他或者覆盖他。

我我我我终于理解闭包了,哈哈哈哈(仰天长啸)(JavaScript闭包理解)相关推荐

  1. 全面理解Javascript闭包和闭包的几种写法及用途【转】

    一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  2. 全面理解Javascript闭包和闭包的几种写法及用途

     一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  3. 让你分分钟理解 JavaScript 闭包

    原文:https://www.cnblogs.com/onepixel/p/5062456.html 让你分分钟理解 JavaScript 闭包 闭包,是 Javascript 比较重要的一个概念,对 ...

  4. 全面理解Javascript闭包和闭包的几种写法及用途--转载自https://www.cnblogs.com/yunfeifei/p/4019504.html...

    全面理解Javascript闭包和闭包的几种写法及用途 好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一 ...

  5. [转载]深入理解JavaScript闭包(closure)

    最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业.对于初学者来说别说理解闭包了,就连文字叙述都很难看懂.撰写此文的目的就是用最通俗的文字揭开Java ...

  6. javascript深入理解js闭包[转]

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  7. javascript深入理解js闭包

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  8. 深入理解Javascript闭包(一)

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用于.变量作用域包括 ...

  9. 关于Javascript闭包的理解

    一.什么是闭包? "官方"的解释是:所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相 ...

最新文章

  1. 蚂蚁森林合种计划(2020.12.26更新,7天有效)
  2. 图灵访谈 | 王贝珊:乘风破浪的成长之路
  3. 重磅丨李飞飞亲自带队,谷歌AI中国中心今天正式成立
  4. 统计php脚本执行时间的php扩展
  5. 函数指针数组在ARM异常中断处理中的应用
  6. 深度学习核心技术精讲100篇(四十二)-阿里妈妈深度树匹配技术演进:TDM->JTM->BSAT
  7. 【整理】PP 成本收集器简介
  8. 博弈论进阶之Anti-SG游戏与SJ定理
  9. 关于产品推荐的10个问题
  10. 5阶无向完全图_运动轿跑风 全新上汽名爵5预告图发布
  11. 自适应网页设计/响应式Web设计 (Responsive Web Design)
  12. 【Qt教程】4.1 - Qt5 文件系统 QFile文件读写操作
  13. javaweb实训第四天下午——员工管理系统-JSPServletJDBC综合练习-CRUD
  14. 编写一个函数itob(),将整数n转换为以b进制的数,保存到s中
  15. Haproxy-1.5.x SSL配置
  16. 3、查询省会(Python实现多行输入,以回车结束输入)
  17. 计算机的基础知识(一)
  18. Win8.1安装与初次体验(图赏)
  19. 服务器无限矿物指令,迷你世界刷矿物指令 | 手游网游页游攻略大全
  20. Python---计算mAP

热门文章

  1. BeijingSubway
  2. 如何在Altium Designer 20中增加原件库
  3. 【计算机网络】——通信协议综述(网络协议、网络分层、ifconfige命令行、DHCP与PXE)
  4. 登录搜狐邮箱并发送邮件的3中方法
  5. 【冷冻电镜】Relion4.0——subtomogram教程
  6. [流畅的Python][8][对象引用、可变性和垃圾回收]
  7. 最实用的使用idea看源码的技巧
  8. java毕业设计——基于java+JSP+sqlserver的智能在线考试信息管理系统设计与实现(毕业论文+程序源码)——智能在线考试信息管理系统
  9. 【Python打卡2019】20190417之计算BMR
  10. linux 系统日常管理