一 :什么是闭包

闭包就是一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)

也就是说 闭包可以让你在一个内层函数中访问到其外层函数的作用域 , 也可以说是函数 + 上下文调用

JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一座桥梁

下面给一个简单的例子

displayName() 没有自己的局部变量。然而,由于闭包的特性,它可以访问到外部函数的变量

二 : 使用场景

任何闭包的使用场景都离不开这两点:

创建私有变量

延长变量的生命周期

一般函数的词法环境在函数返回后就被销毁,但是闭包会保存对创建时所在词法环境的引用,即便创建时所在的执行上下文被销毁,但创建时所在词法环境依然存在,以达到延长变量的生命周期的目的

使用闭包模拟私有方法

JavaScript中,没有支持声明私有变量,但我们可以使用闭包来模拟私有方法

下面举个例子 :

上述通过使用闭包来定义公共函数,并令其可以访问私有函数和变量,这种方式也叫模块方式

两个计数器 Counter1 和 Counter2 是维护它们各自的独立性的,每次调用其中一个计数器时,通过改变这个变量的值,会改变这个闭包的词法环境,不会影响另一个闭包中的变量

三: 注意点 

        如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响

例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。

原因在于每个对象的创建,方法都会被重新赋值

上面的代码中,我们并没有利用到闭包的好处,因此可以避免使用闭包。修改成如下:

希望对大家有用 ...

什么是闭包 以及使用场景相关推荐

  1. python闭包的应用场景_简单谈谈Python中的闭包

    Python中的闭包 前几天又有人留言,关于其中一个闭包和re.sub的使用不太清楚.我在脚本之家搜索了下,发现没有写过闭包相关的东西,所以决定总结一下,完善Python的内容. 1. 闭包的概念 首 ...

  2. 什么是闭包,闭包的优缺点,闭包的使用场景

    概念 闭包是指有权访问另外一个函数作用域中的变量的函数 闭包的优点 可以重复使用变量,并且不会造成变量污染 全局变量可以重复使用,但是容易造成变量污染.局部变量仅在局部作用域内有效,不可以重复使用,不 ...

  3. python闭包的应用场景_Python闭包函数定义与用法分析

    python函数的闭包怎么理解小编憎恨离别.但若,离别能让你牵挂,小编愿意离开你. 1. 闭包的概念 首先还得从基本概念说起,什么是闭包呢?来看下维基上的解释: 复制代码代码如下: 在计算机科学中,闭 ...

  4. python闭包的应用场景_python闭包浅见

    1.个人理解定义:在一个函数A内部定义一个函数B,并在定义的内部函数B内对这个函数A的变量进行引用,那么内部函数B就是闭包. 2.特性:在内部函数内不能对A函数的变量进行更改 (但是可以将其封装到一个 ...

  5. JavaScript 的闭包用于什么场景

    本文翻译自 MDN ( Mozilla Developer Network ): 原文地址:MDN 译文地址:shixinzhang 的博客 读完本文你将了解到: 词法作用域 闭包 闭包实战场景之回调 ...

  6. 什么是闭包,闭包的使用场景?

    简单总结 闭包(closure):函数嵌套函数,内部的函数就是闭包,正常情况下,函数执行完成,内部变量会销毁(销毁:释放内存空间),内部函数没有执行完成,外部函数变量不会被销毁 function ou ...

  7. python闭包的应用场景_聊聊Python闭包-阿里云开发者社区

    Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西. 闭包的概念 我们尝试从概念上去理解一下闭包. 在一些语言中,在函数中可以(嵌套)定义另一个 ...

  8. javascript之闭包理解以及应用场景

    1 function fn(){2 var a = 0;3 return function (){4 return ++a;5 } 6 } 如上所示,上面第一个return返回的就是一个闭包,那么本质 ...

  9. 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

    js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...

  10. 闭包的理解、缺点以及应用场景

    闭包的概念 闭包是指有权访问另一个函数作用域中的变量的函数.创建闭包的常见方式,就是在一个函数内部创建另一个函数. 闭包的理解 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和 ...

最新文章

  1. 什么是体系化?为什么要体系化架构
  2. VS Code 配置 Python 开发环境
  3. ACM基础题 - 去除字符序列中的几个字符
  4. Dreamwear如何创建javascript_JavaScript还可以处理日期?你只需要这样做
  5. 29.类加载机制、类加载过程、加载、验证、准备、解析、初始化、总结
  6. 从零开始学keras之变分自编码器生成图像
  7. 拼多多九鼎:信息披露无瑕疵 “注水”的是竞争对手
  8. 我是如何做Web项目的
  9. MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
  10. nodejs 简单安装环境
  11. c语言获取pmbus之pec值
  12. 【Python精华】100个Python练手小程序
  13. C语言 计算字符串长度的几种方法
  14. VC++开发RTX拨打电话插件
  15. protoc-gen-go 安装
  16. 案例——中国篮球运动员的基本信息分析
  17. Spring之Specification复杂查询和Criteria查询
  18. onkeypress 、onkeyup 与onkeydown三者之间的区别
  19. 干货丨时序数据库DolphinDB即时编译(JIT)详解
  20. 手心输入法人名模式导致navicat闪退

热门文章

  1. 如何成长为硬件工程师
  2. 电脑技巧:加装SSD固态硬盘注意事项,电脑速度超流畅
  3. 基因组选择技术在农业动物育种中的应用
  4. VMware Ubuntu安装详细过程(非常靠谱)
  5. MATLAB基本操作之画图
  6. 全球及中国企业数据存储解决方案行业发展动态及前景规划分析报告2022-2027
  7. 电脑重装系统苹果笔记本开不了机的解决措施有哪些
  8. 搭档之家:14天1.5万人民币!悉尼将征收入境隔离费
  9. python sl4a_SL4A - 随风飘落的雨滴 - 博客园
  10. 萨达阿萨德发送到在线橙V