javascript – 全局变量和全局对象的属性之间是否有任何区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 全局变量和全局对象的属性之间是否有任何区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2024字,纯文字阅读大概需要3分钟。
内容图文
我正在阅读大卫马克关于js框架“Sencha”的以下分析:https://gist.github.com/3279190并且在那里他说……
What they wanted was a global variable, but they ended up with is a property of the Global Object. According the specifications and (and implementation history) there are enough differences between the two that care is required not to mix them up (as is done here).
…但据我所知,var my_global = 123之间没有任何区别;和(在浏览器环境中)window.my_global = 123; (在那个例子中,我假设环境是一个浏览器 – 因此使用了窗口,但我本来可以使用this.my_global,因为很明显,当在不同的环境中运行时,全局对象会有所不同).
但忽略这种微小的差异是否将属性分配给全局对象和创建全局变量之间存在差异?我没想过,创建全局变量只是将属性分配给全局对象的另一种方法.
我相信在某些浏览器中可能存在一个问题,如果它们的id为“my_global”,那么显然可能会导致JavaScript引用正确的问题,但我不确定如何/导致该问题的原因(例如,将属性分配给全局对象导致元素id问题发生,或者是否声明导致元素id问题的全局变量?)
有人可以为我澄清一下吗?
解决方法:
在全局范围内使用var创建的变量确实会创建全局对象的属性.但是,此属性与尚未使用var创建的全局对象的属性具有不同的行为.
首先,执行变量声明的方式有所不同:全局范围中的var语句在执行任何代码之前创建全局对象的属性,这种效应通常称为提升,在Web上有详细记录(请参阅下面的参考资料) ).
其次,全局变量与未使用var创建的全局对象的属性不同,不能使用delete运算符删除(尽管这是not true in older versions of IE).删除不能用于删除变量.这种差异低至每个对象属性所具有的内部property attributes.这些属性在ECMAScript规范中指定.在ECMAScript 5术语中,var foo =“bar”创建全局对象的属性foo,[[Configurable]]属性为false,而this.foo =“bar”(在全局范围内)使用[[Configurable]创建foo属性]属性为真.
参考文献:
>德米特里·索斯尼科夫(Dmitry Soshnikov)在他的出色表现中详细讲述了这一点
系列文章,ECMAScript 262-3 in detail.我推荐
阅读第2章的全部内容,但最相关的部分被称为
About Variables.
>之前链接的kangax article包含了很多
浏览器错误和偏差的相关信息和详细信息,
加上关于窗口的进一步怪癖.
> Angus Croll的Variables vs. Properties in JavaScript article,链接到许多与此答案相同的资源.
>规格:ECMAScript 5.1.
内容总结
以上是互联网集市为您收集整理的javascript – 全局变量和全局对象的属性之间是否有任何区别全部内容,希望文章能够帮你解决javascript – 全局变量和全局对象的属性之间是否有任何区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。