位置: 编程技术 - 正文

跟我学习javascript的全局变量(java learning)

编辑:rootadmin

推荐整理分享跟我学习javascript的全局变量(java learning),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java教程 视,java script,java script怎么学,java script怎么学,java script课程,java script课程,java script怎么学,java script怎么学,内容如对您有帮助,希望把文章链接给更多的朋友!

一、尽量少用全局对象

全局变量的问题在于,你的JavaScript应用程序和web页面上的所有代码都共享了这些全局变量,他们住在同一个全局命名空间,所以当程序的两个不同部分定义同名但不同作用的全局变量的时候,命名冲突在所难免。

web页面包含不是该页面开发者所写的代码也是比较常见的,例如:

第三方的JavaScript库 广告方的脚本代码 第三方用户跟踪和分析脚本代码 不同类型的小组件,标志和按钮

比方说,该第三方脚本定义了一个全局变量,叫做result;接着,在你的函数中也定义一个名为result的全局变量。其结果就是后面的变量覆盖前面的,第三方脚本就一下子嗝屁啦!

因为,你不小心,在代码的某一处修改了全局变量, 会导致依赖全局变量的其它模块出错。而且出错原因难调试,难找到。

再者就是,网页运行肯定用到window对象,浏览器引擎又要遍历一次window的属性,性能下降。

全局变量是维系不同模块之间的纽带,模块之间只能通过全局变量来访问对方提供的功能 能使用局部变量的时候,绝不要使用全局变量

保持这些变量为局部变量,仅将其作为需要使用它们的代码的一部分。

在browser中,this关键字会指向全局的window对象JavaScript 的全局命名空间也被暴露为在程序全局作用域中可以访问的全局对象,该对象作为 this 关键字的初始值。在 Web 浏览器中,全局对象被绑定到全局的 window 变量。添加或修改全局变量会自动更新全局对象。

类似地,更新全局对象也会自动地更新全局命名空间:

两种用来改变全局对象的方式,通过var关键字声明以及给全局对象设置属性(通过this关键字)

通过全局对象进行针对当前运行环境的特性检测(Feature Detection),比如在ES5中提供了一个JSON对象用来操作JSON数据,那么可以通过if(this.JSON)来判断当前运行环境是否支持JSON

二、如何避免全局变量

跟我学习javascript的全局变量(java learning)

方法一:只创建一个全局变量。

方法二:使用模块模式

所谓模块模式,就是创建一个函数,该函数包括,私有变量和一个特权对象,特权对象的内容是,利用闭包能访问到私有变量的函数,最后返回特权对象。

首先,方法二,不仅可以当作全局变量用,也可以用在局部声明全局变量。因为就算你在不知道某个地方修改了seqer,就会立即报错,因为这是个对象,不是字符串。

方法三:零全局变量

零全局变量实际上是为了适应一小段封闭代码而采取的一种局部变量处理方式,只适合在一些特殊场景中使用。最常见的就是一些不会被其他脚本访问到的完全独立的脚本。 使用零全局变量的方式需要采用立即执行函数,用法如下。

三、意外的全局变量

由于JavaScript的两个特征,不自觉地创建出全局变量是出乎意料的容易。首先,你可以甚至不需要声明就可以使用变量;第二,JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性。参考下面的代码:

此段代码中的result没有声明。代码照样运作正常,但在调用函数后你最后的结果就多一个全局命名空间,这可以是一个问题的根源。

经验法则是始终使用var声明变量,正如改进版的sum()函数所演示的:

另一个创建隐式全局变量的反例就是使用任务链进行部分var声明。下面的片段中,a是本地变量但是b确实全局变量,这可能不是你希望发生的:

此现象发生的原因在于这个从右到左的赋值,首先,是赋值表达式b = 0,此情况下b是未声明的。这个表达式的返回值是0,然后这个0就分配给了通过var定义的这个局部变量a。换句话说,就好比你输入了:

var a = (b = 0); 如果你已经准备好声明变量,使用链分配是比较好的做法,不会产生任何意料之外的全局变量,如:

然而,另外一个避免全局变量的原因是可移植性。如果你想你的代码在不同的环境下(主机下)运行,使用全局变量如履薄冰,因为你会无意中覆盖你最初环境下不存在的主机对象

总是记得通过var关键字来声明局部变量

使用lint工具来确保没有隐式声明的全局变量

标签: java learning

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

上一篇:浅析JavaScript访问对象属性和方法及区别(js访问thymeleaf值)

下一篇:跟我学习javascript的var预解析与函数声明提升(java script)

  • 采购材料入库会计分录怎么写的
  • 建筑业预缴企业所得税
  • 小规模超过30万附加税减半吗
  • 清算后剩余财产归一方所有
  • 网上认证勾选平台登录不成功
  • 退运出口货物的报关流程
  • 结转完工入库产品成本计算
  • 收到子公司非货币资产分配账务处理
  • 购买股票如果公司亏损
  • 本月发放上月工资情况说明
  • 出租车发票日期可以改吗
  • 开发商按揭贷款担保责任有哪些
  • 文体活动费用计入什么科目
  • 其他收益是否缴纳个税
  • 建筑劳务公司开发票
  • 外币报表折算差额在会计报表中应作为( )
  • 现金流量表的填制方法和构成
  • 新公司税控盘购买流程
  • 应付职工薪酬的贷方表示什么
  • 公司资金周转困难怎么办
  • 如何在windows11上打开蓝牙
  • 外汇账户怎么做账
  • 机械设备购置的程序是什么
  • 电脑记事本在哪里打开
  • 个税返还会计政策
  • 应付账款周转天数长对企业的影响
  • 包装物押金收入计入收入总额吗
  • 固定资产折旧表述不正确的是
  • 纳税人解除劳动合同补偿
  • php自定义字段
  • 生产企业外销收入账务处理
  • ts基础类型
  • 增值税纳税申报表附列资料(一)
  • 网站伪静态有什么用
  • 使用命令查看
  • 命令行改gpt
  • java微信公众号开发源码
  • 车间用的液化气计入什么科目
  • 报销业务招待费是什么凭证
  • 进口货物的报关成交方式
  • 固定资产清理借方表示什么意思
  • sqlserver如何锁表
  • 财务报表审计的定义
  • 购买无形资产的入账价值包括增值税吗
  • 个人所得税率怎么退
  • 以前年度社保计提出错了怎么调整
  • 收到的成本票怎么做账
  • 收到实务返利的发票
  • 投资利润率多少算合理
  • 企业哪些税费不通过应交税费账户进行核算
  • 税控维护费是什么意思
  • 本年利润在借方表示什么意思
  • 农业生产成本核算方法
  • 处置长投其他权益变动要转损益吗
  • 工会经费的使用应当依法接受国家的监督
  • 企业专家咨询费标准
  • 商业承兑汇票提示付款流程
  • sql server如何重启
  • 如何修复win7系统文件损坏
  • winlogon是什么意思
  • gnaupdaemon.exe是什么
  • win 7系统无法删除系统文件
  • linux中vi替换
  • win7关闭文件夹和内容一起显示
  • win8电脑怎么设置定时开机
  • linux系统怎么修改文件里的参数
  • windows7 dns
  • win7关闭445端口 注册表
  • opengl英文
  • 简单谈谈你的入党动机
  • 简述jquery的优势
  • 安卓初始化
  • Python工程师面试题 与Python Web相关
  • python的垃圾处理机制
  • jquery实例
  • 国家税务局湖北省税务总局
  • 中国一年的税收是多少万亿
  • 小规模开票税金怎么算
  • 股权转让查账重点查什么
  • 企业所得税按开票金额的多少计算税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设