位置: 编程技术 - 正文

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总结笔记)

  • 诚信纳税的含义是什么
  • 企业所得税中资产总额平均值怎么核算?
  • 个人所得税汇算清缴情况报告
  • 开立一般户需要基本户开户行许可证吗
  • 增值税税差怎么算
  • 个体工商户税收标准2023年
  • 向投资者支付股利
  • 小规模纳税人出售使用过的汽车
  • 新注册公司开银行卡流程
  • 会计凭证整理的要求有哪些
  • 没收不还
  • 营改增之前的房产出售税率
  • 生产中的原料回收如何做会计帐务处理?
  • 为什么销售人员佣金计入合同取得成本
  • 什么情况下税务会查账
  • 员工个人所得税申报方式选哪个
  • 分公司可以单独签协议吗
  • 收到退回的银行汇票会计分录
  • 政府委托代建的房地产公司是否可以开立农民工工资
  • 先开票后预缴能退吗
  • 企业所得税投资收益纳税调整
  • 库存商品转结
  • 保险公司赔偿的存货自然灾害损失
  • 鸿蒙侧边菜单
  • 公司收到项目的现金
  • hipsdaemon.exe是什么
  • 公司客户招待费用标准
  • 增值税专用发票有几联?
  • phpunicode
  • phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
  • 海滨德拉海滩庄园别墅
  • 老生常谈含义
  • Joomla使用Apache重写模式的方法
  • 鲁棒性分析方法
  • win11装双系统虚拟机mac
  • vue中key
  • 前期认证相符且不符合
  • dedecms配置
  • 织梦模板安装完整教程
  • 施工企业预缴税款
  • 财务报表怎么重新编制
  • 建账的三个基本步骤
  • sqlserver表与表之间怎么关联
  • 基本户开立账户清单
  • 银行余额调节表的作用
  • 一般纳税人登记 核算地址
  • 计提城建税的会计分录怎么写
  • 机票会计代理如何做
  • 专利年费 缴纳
  • 建筑行业每月报税
  • 资产总额怎么进行税务数据授权登记
  • 什么发票可以抵扣税
  • 工会经费计提比例0.8%和2%有何区别
  • 给客户的促销费用怎么入账
  • 资产负债表不平最简单的方法
  • win7一直弹广告怎么办
  • ubuntu系统中安装微信步骤
  • safari 快捷键
  • win10如何打开管理
  • 电脑xp系统如何
  • centos7安装视频教程
  • 照相机文件名
  • linux groupmod命令参数及用法详解(linux修改组信息命令)
  • win8使用教程和技能
  • win10一堆毛病
  • windows8.1升级到windows10
  • usb转串口的接线方法
  • nodejs示例
  • linux安装xen
  • js计数排序
  • angular页面加载完后执行方法
  • jquery根据class
  • shell脚本 -ne 0
  • javascript的dom
  • javascript cookbook
  • js如何使用
  • 山东省税务局网上办税服务厅
  • 消费税的征税范围包括
  • 云旅游存在的问题及解决措施
  • 开原航天医院官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设