位置: 编程技术 - 正文

Javascript学习笔记之 函数篇(三) : 闭包和引用(javascript怎么学)

编辑:rootadmin

推荐整理分享Javascript学习笔记之 函数篇(三) : 闭包和引用(javascript怎么学),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript入门教程,javascript教程推荐知乎,javascript学习指南,javascript怎么学,javascript入门教程,javascript教程推荐知乎,javascript教程推荐知乎,javascript基础笔记,内容如对您有帮助,希望把文章链接给更多的朋友!

Javascript 中一个最重要的特性就是闭包的使用。因为闭包的使用,当前作用域总可以访问外部的作用域。因为 Javascript 没有块级作用域,只有函数作用域,所以闭包的使用与函数是紧密相关的。

模拟私有变量

这里 Counter 返回两个闭包:函数 increment 和 get。这两个函数一直保持着对 Counter 作用域的访问,因此它们能一直访问到定义在 Counter 作用域的变量 count。

私有变量的工作机制

由于 Javascript 不可以对作用域赋值和引用,所以在上例中,是没有办法在外部直接访问内部私有变量 count。唯一的方法就是通过定义闭包来访问。

上面的代码不会改变 Counter 作用域内的 count 变量值,因为 hack 没有在 Counter 内定义。上面这段代码只会创建或者覆盖全局变量 count。

循环内的闭包

一个最容易犯的错误就是在循环内使用闭包。

Javascript学习笔记之 函数篇(三) : 闭包和引用(javascript怎么学)

上面这段代码不会输出0到9,而是连续输出次。上面的匿名会一直保持一个对变量 i 的引用。当调用 console.log 函数开始输出时,这是循环已经结束,而变量 i 已经为了。为了避免上面的错误发生,我们需要在每次循环时为变量 i 值创建一个拷贝。

避免引用错误

为了复制循环中变量的值,最好的方式是在外层加一个匿名的立刻执行函数。

这个外部的匿名函数接收循环变量 i 作为第一个参数,并将其值拷贝至它自身的参数 e。外部的匿名函数将参数 e 再传递给 setTimeout,因此 setTimeout 有了指向参数 e 的引用。而且这个参数 e 的值不会因为外部的循环改变而改变。

还有另外一个方法可以实现同样的效果,就是在 setTimeout 内的匿名函数中再返回一个匿名函数:

此外,通过 bind 方法也可以实现。

文章最后我们来总结下:

(1)闭包是一种设计原则,它通过分析上下文,来简化用户的调用,让用户在不知晓的情况下,达到他的目的;(2)网上主流的对闭包剖析的文章实际上是和闭包原则反向而驰的,如果需要知道闭包细节才能用好的话,这个闭包是设计失败的;(3)尽量少学习。

Javascript学习笔记之函数篇(四):arguments 对象 每一个Javascript函数都能在自己作用域内访问一个特殊的变量-arguments。这个变量含有一个传递给函数的所有参数的列表。arguments对象不是一个数组。尽管

Javascript学习笔记之函数篇(五) : &#;构造函数 Javascript中的构造函数与其他语言相比也是不同的。任何通过关键字new调用的函数都可以当做构造函数。在构造函数体内,this指向新创建的对象。如果构

Javascript学习笔记之函数篇(六) : &#;作用域与命名空间 在之前的介绍中,我们已经知道Javascript没有块级作用,只有函数级作用域。functiontest(){//ascopefor(vari=0;i;i++){//notascope//count}console.log(i);//}Javascript中也

标签: javascript怎么学

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

上一篇:JS常用函数使用指南(js函数总结)

下一篇:Javascript学习笔记之函数篇(四):arguments 对象(javascript总结笔记)

  • 计提本月个人所得税
  • 出口抵减内销产品应纳税额为什么在借方
  • 个税是按照实发工资计算吗
  • 自产用于捐赠的会计处理
  • 租房专项扣除有上限吗
  • 代扣代缴个税对企业所得税的影响
  • 赠送的商品怎么缴纳增值税
  • 对方公司开发票我方未付款如何做分录?
  • 公司土地和厂房可以按折价卖结股东权益吗
  • 会计凭证的填制与审核过程
  • 投资子公司的现金流量
  • 计提的利息汇算清缴前没发放,需要交企业所得税吗
  • 原材料加工费怎么入账的
  • 境外所得抵免税额是什么意思
  • 无形资产摊销金额计入什么科目
  • 筹建期装修费用计入什么科目
  • 油票需要填纳税信息吗
  • 企业自行建造的固定资产
  • 轨道交通很高兴 土地税优惠来了
  • 核销外管证需要什么手续
  • 收到投资款现金流量项目是什么
  • 简述资产的概念特征以及确认条件
  • 给客户打折账务处理
  • 劳务报酬所得缴多少税
  • 企业员工自行体检流程
  • 产品质量监督检验
  • 上年结转的广告费次年怎么入账
  • PHP+Mysql+jQuery文件下载次数统计实例讲解
  • searchnav.exe - searchnav是什么进程 有什么用
  • 计提税金及附加的金额如何算
  • 在海里的章鱼
  • SpringBoot + Vue基本知识点荟萃
  • nginx ss
  • 小企业会计准则2023电子版
  • 合同负债和预收负债的区别
  • 卡比托丽娜·瓦西里耶娃
  • 前端试题大全及答案
  • php短信验证
  • 织梦怎么调用当前栏目下的文章
  • 异地工程预缴税款时间
  • 我国营改增后,一般纳税人适用的增值税基本税率
  • 应付票据贴现是负债吗
  • 未来的现金流折现
  • 收到汽车会计分录
  • mongodb开启远程连接
  • 实收资本认缴怎么做账,要做账吗
  • 税控盘技术服务费抵扣期限
  • 建筑安装增值税纳税地点
  • 金税四期对企业影响
  • 销售补偿法
  • 抵扣联过期时间
  • 月销售额不超过15万的免征增值税
  • 出口转内销增值税报表怎么填
  • 总公司与分公司的账务处理
  • 农业免税企业开票有限额吗
  • 结转存货跌价准备是什么意思
  • mysql常见故障和解决方法
  • windows server 202
  • ubuntu20.04怎么用
  • ubuntu16连接wifi步骤
  • 苹果mac浏览器
  • 虚拟机linux使用
  • win10如何动态桌面
  • win7如何设置屏幕保护时间
  • 2021年win10累积更新
  • linux 有哪些
  • linux安装glibc.i686
  • css样式表可以兼容所有浏览器吗
  • unity接sdk教程
  • ie6怎么设置兼容性
  • javascript数据
  • n归档是什么软件
  • linux shell -s
  • shell脚本编程实例
  • js判断checkbox是否被选中
  • 电子税务局官网江西省
  • 资本公积如何转增股本的流程
  • 进项税额转出影响所得税吗
  • 贵阳市税务局投诉电话号码
  • 税务局是什么单位类型
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设