位置: 编程技术 - 正文

JavaScript 闭包详细介绍(javascript中的闭包)

编辑:rootadmin

推荐整理分享JavaScript 闭包详细介绍(javascript中的闭包),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript闭包运行原理,js闭包详解,javascript闭包原理,javascript闭包详解,javascript闭包运行原理,javascript中的闭包,javascript闭包运行原理,javascript闭包详解,内容如对您有帮助,希望把文章链接给更多的朋友!

深入理解JavaScript——闭包

  跟很多新手一样我也是初入前端,对闭包的理解花费的时间和精力相当的多。效果也还行,今天我就来根据自己的理解细致的讲一讲闭包,由于是初入学习的时候不免有一些弯路和困惑,我想信这也是很多跟我一样的人会同样遇到的问题。我就以自己的学习路径和遇到的各种坑来谈闭包。希望对各位有一定的帮助。(菜鸟,也请各位多多指教)

  闭包是什么?《JavaScript高级程序设计》上面这么描述的:闭包是指有权访问另一个函数作用域中的变量的函数。这句话第一次看的时候模模糊糊,似是而非。碰到问题就不会运用了,听别人的分析头头是道,说到底还是没搞明白。现在我觉得要彻底搞清这句话必须对JavaScript的作用域,匿名函数,甚至JavaScript的编译原理有一些简单的了解。经过查阅理解各种资料书籍对闭包的解释,再回过头来看了一些源码,慢慢的有了一点感觉。我觉得对闭包描述最好的一句话是:“闭包是基于词法作用域书写代码时所产生的自然结果,你甚至不需要为了利用它而有意为之的创建闭包,闭包的创建和使用是在你的代码中随处可见。你缺少的是根据你自己的意愿来识别,拥抱和影响闭包的思维环境。”话有点长但点出来闭包在JavaScript这么语言中存在的实际价值,大家可以细细体会一下。接下来我已实际例子来讲讲闭包。

首先看一个简单的例子:

JavaScript 闭包详细介绍(javascript中的闭包)

例子中返回的是一个匿名函数,其中匿名函数中value1,value2同时又对外部函数createComparisonFunction()的参数propertyName进行调用。再看看上面对闭包的定义:有权访问另一个函数作用域中的变量的函数。return的匿名函数有权访问外部函数作用域中的变量propertyName,因此这是一个闭包。但实际来说这只是一个基于词法作用域的查找规则,很好理解也很自然。

  可能有些人不明白什么是词法作用域的查找规则:其实说简单点就是根据变量的作用链域来查找并取得该变量。以上例来说:createComparisonFunction函数的作用域包含一个变量property和一个匿名函数(由于没有函数名其实在createComparisonFunction函数中也无法调用,这也是匿名函数的一个缺点,记得事件监听函数调用一个匿名函数时是无法移除吗?道理是一样的),匿名函数作用域中包括obj1,obj2,value1,value2这四个变量。匿名函数中的变量调用时首先在自己作用域中查询,找到了该变量就调用,找不到就往外层走接着找,直到全局作用域如果还是找不到就会报ReferenceError(如果找到了一个var a;呢?由于a为undefined所以会报TypeError)。而createComparisonFunction函数则只能在他的作用域中查找,不能去内层的匿名函数中查找,这种查找规则就是词法作用域的查找规则(当然这不只是基本规则)。

 我们再来看一个例子:

  答案可能很多人都能猜出来但其实现原理是怎样呢?我现在就来细致的分析一下:首先声明了一个函数foo其作用域包括变量a和bar函数。foo函数内部有一个函数bar内部没有新变量。然后定义一个变量baz,其值为foo()而foo()返回bar,顾baz=bar;最后一句baz()即等价于bar();根据词法作用域的规则bar是在foo函数中声明的。外部是无法访问的呀!这正是闭包的神奇之处!我们再一次回到闭包定义:有权访问另一个函数作用域中的变量的函数,baz()函数有权访问foo函数中的bar。这就是闭包对吧!搞清闭包后有些人还会疑问?闭包是怎么形成的,为什么你说它有权访问foo中的bar呢?首先闭包的形成是在一个函数内部创建一个函数这是创建闭包的最常见方法。当将内部函数传递到它的词法作用域以外他都会持有对原始定义作用域的引用,执行此函数就会 使用闭包。

  闭包的基础大概就是这几点,希望大家能仔细体会。抽时间补充点闭包的一些其他用途,来帮大家扩展一下思维。

通过此文,希望大家对闭包的知识掌握,谢谢大家对本站的支持!

JS 事件绑定、事件监听、事件委托详细介绍 在JavaScript的学习中,我们经常会遇到JavaScript的事件机制,例如,事件绑定、事件监听、事件委托(事件代理)等。这些名词是什么意思呢,有什么作用

浅谈javascript:两种注释,声明变量,定义函数 javascript:单行注释用//呵呵呵呵;多行注释用/*hdhdhdh*/javascript中区别大小写,定义变量使用关键字var,语法如下:var变量名,其中变量从编程角度讲,变

老生常谈javascript变量的命名规范和注释 简单说,标识符命名规则如下:第一个字符可以是任意Unicode字母,以及美元符号($)和下划线(_)。第二个字符及后面的字符,还可以用数字。下面

标签: javascript中的闭包

本文链接地址:https://www.jiuchutong.com/biancheng/373596.html 转载请保留说明!

上一篇:关于js原型的面试题讲解(js原型面试题)

下一篇:JS 事件绑定、事件监听、事件委托详细介绍(js的事件绑定)

  • 投资收益所得税前扣除
  • 怎么知道个税是退税还是补税
  • 房地产公司房屋质量排名
  • 实验用原材料的会计处理
  • 品种法完工产品成本的单位成本怎么算
  • 发票逾期未认证个人要承担责任吗
  • 税收征收管理法
  • 招待费多少
  • 企业所得税年报更正申报
  • 环保设备的折旧计入
  • 收入与应收款
  • 企业核算方法
  • 增值税小规模纳税人减免增值税政策
  • 鸿蒙系统怎么自动填充密码
  • 怎么跟银行谈停息挂账
  • 路由器2.4g和4g有什么区别
  • 开机反应慢是怎么回事
  • windows 11预览版
  • 收益性支出与资本性支出的主要特点
  • 进口应税消费品会计分录
  • 税收保全有哪些
  • PHP:pg_lo_create()的用法_PostgreSQL函数
  • 公司福利放置零食文案
  • 公司缴纳的公积金什么时候到账
  • php安装扩展fileinfo
  • 外购商品转为自用洧费税计算
  • 现金折扣发生销售退回
  • 坎塔布莱恩
  • 公司亏损注销了怎么处理
  • cv2.error:opencv(3.4.2)
  • vue中的组件
  • Vue3+TypeScript+Vite如何使用require动态引入类似于图片等静态资源
  • php教程从入门到精通
  • 应征增值税不含税销售额(5%征收率)是什么意思
  • 结转生产成本是负数怎么办
  • 出差费用包干制还需要报销吗
  • 公司的基本户怎么换
  • 织梦怎么样
  • 织梦自定义模型调用
  • python多线程多核
  • 商业承兑汇票如何追索
  • 企业应纳税额中包括进项税额
  • 揭秘如何投屏纽约时代广场
  • 应交税费账户的用途和结构是怎样的
  • 如何理解合并报表编制程序中的调整与抵消处理
  • 经营性应收项目的减少调增 为什么是减
  • 农副产品商贸公司如何做账
  • 劳务派遣公司差额征税怎么做账
  • 工厂加工费如何计算
  • 小规模开具的1%专票 一般纳税人抵扣
  • 销售免税农产品的会计分录
  • 餐饮业燃气费计入什么科目
  • 年度所得税汇算清缴报告在哪打印
  • 本月多交的增值税
  • 购入研发设备可以抵扣吗
  • 会议接待纸笔摆放
  • 工业企业存货发出计价的方法
  • mysql命令导入
  • 64位win8怎么安装南天PR2E针式打印机驱动?
  • windows iis配置
  • win 7操作系统安装
  • centos安装编译环境
  • ubuntu ftp服务器怎么搭建
  • macappstore下载不了软件
  • onetouch.exe - onetouch是什么进程 有什么用
  • unity获取mesh网格数据
  • 深入理解新发展理念,推进供给侧结构性改革心得体会
  • shell脚本实现输出字母个数大于5的单词
  • 如何理解闭包,闭包的优缺点
  • 批处理命令在windows操作中的典型应用
  • html焦点图
  • nodejs gyp
  • js动态给table添加行
  • nodejs怎么启动服务
  • De facto standard 世界上不可思议的事实标准
  • javascript要学哪些
  • 关于工龄认定的司法解释
  • 增值税发票税控开票软件卸载不了
  • 税费算在房价里
  • 国家税务局增值税发票平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设