什么是闭包 以及使用场景
一 :什么是闭包
闭包就是一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)
也就是说 闭包可以让你在一个内层函数中访问到其外层函数的作用域 , 也可以说是函数 + 上下文调用
在 JavaScript
中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一座桥梁
下面给一个简单的例子
displayName()
没有自己的局部变量。然而,由于闭包的特性,它可以访问到外部函数的变量
二 : 使用场景
任何闭包的使用场景都离不开这两点:
创建私有变量
延长变量的生命周期
一般函数的词法环境在函数返回后就被销毁,但是闭包会保存对创建时所在词法环境的引用,即便创建时所在的执行上下文被销毁,但创建时所在词法环境依然存在,以达到延长变量的生命周期的目的
使用闭包模拟私有方法
在JavaScript
中,没有支持声明私有变量,但我们可以使用闭包来模拟私有方法
下面举个例子 :
上述通过使用闭包来定义公共函数,并令其可以访问私有函数和变量,这种方式也叫模块方式
两个计数器 Counter1
和 Counter2
是维护它们各自的独立性的,每次调用其中一个计数器时,通过改变这个变量的值,会改变这个闭包的词法环境,不会影响另一个闭包中的变量
三: 注意点
如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响
例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。
原因在于每个对象的创建,方法都会被重新赋值
上面的代码中,我们并没有利用到闭包的好处,因此可以避免使用闭包。修改成如下:
希望对大家有用 ...
什么是闭包 以及使用场景相关推荐
- python闭包的应用场景_简单谈谈Python中的闭包
Python中的闭包 前几天又有人留言,关于其中一个闭包和re.sub的使用不太清楚.我在脚本之家搜索了下,发现没有写过闭包相关的东西,所以决定总结一下,完善Python的内容. 1. 闭包的概念 首 ...
- 什么是闭包,闭包的优缺点,闭包的使用场景
概念 闭包是指有权访问另外一个函数作用域中的变量的函数 闭包的优点 可以重复使用变量,并且不会造成变量污染 全局变量可以重复使用,但是容易造成变量污染.局部变量仅在局部作用域内有效,不可以重复使用,不 ...
- python闭包的应用场景_Python闭包函数定义与用法分析
python函数的闭包怎么理解小编憎恨离别.但若,离别能让你牵挂,小编愿意离开你. 1. 闭包的概念 首先还得从基本概念说起,什么是闭包呢?来看下维基上的解释: 复制代码代码如下: 在计算机科学中,闭 ...
- python闭包的应用场景_python闭包浅见
1.个人理解定义:在一个函数A内部定义一个函数B,并在定义的内部函数B内对这个函数A的变量进行引用,那么内部函数B就是闭包. 2.特性:在内部函数内不能对A函数的变量进行更改 (但是可以将其封装到一个 ...
- JavaScript 的闭包用于什么场景
本文翻译自 MDN ( Mozilla Developer Network ): 原文地址:MDN 译文地址:shixinzhang 的博客 读完本文你将了解到: 词法作用域 闭包 闭包实战场景之回调 ...
- 什么是闭包,闭包的使用场景?
简单总结 闭包(closure):函数嵌套函数,内部的函数就是闭包,正常情况下,函数执行完成,内部变量会销毁(销毁:释放内存空间),内部函数没有执行完成,外部函数变量不会被销毁 function ou ...
- python闭包的应用场景_聊聊Python闭包-阿里云开发者社区
Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西. 闭包的概念 我们尝试从概念上去理解一下闭包. 在一些语言中,在函数中可以(嵌套)定义另一个 ...
- javascript之闭包理解以及应用场景
1 function fn(){2 var a = 0;3 return function (){4 return ++a;5 } 6 } 如上所示,上面第一个return返回的就是一个闭包,那么本质 ...
- 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...
- 闭包的理解、缺点以及应用场景
闭包的概念 闭包是指有权访问另一个函数作用域中的变量的函数.创建闭包的常见方式,就是在一个函数内部创建另一个函数. 闭包的理解 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和 ...
最新文章
- 什么是体系化?为什么要体系化架构
- VS Code 配置 Python 开发环境
- ACM基础题 - 去除字符序列中的几个字符
- Dreamwear如何创建javascript_JavaScript还可以处理日期?你只需要这样做
- 29.类加载机制、类加载过程、加载、验证、准备、解析、初始化、总结
- 从零开始学keras之变分自编码器生成图像
- 拼多多九鼎:信息披露无瑕疵 “注水”的是竞争对手
- 我是如何做Web项目的
- MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
- nodejs 简单安装环境
- c语言获取pmbus之pec值
- 【Python精华】100个Python练手小程序
- C语言 计算字符串长度的几种方法
- VC++开发RTX拨打电话插件
- protoc-gen-go 安装
- 案例——中国篮球运动员的基本信息分析
- Spring之Specification复杂查询和Criteria查询
- onkeypress 、onkeyup 与onkeydown三者之间的区别
- 干货丨时序数据库DolphinDB即时编译(JIT)详解
- 手心输入法人名模式导致navicat闪退