首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新声明的javascript全局变量覆盖IE中的旧值。

重新声明的javascript全局变量覆盖IE中的旧值。
EN

Stack Overflow用户
提问于 2010-04-14 05:06:25
回答 3查看 7.4K关注 0票数 10

(在评论后创建一个单独的问题:Javascript redeclared global variable overrides old value)

我正在使用方括号表示法创建一个全局范围的变量,并在外部js文件中为它分配一个值。

在另一个js文件中,我声明一个var,其名称与我刚才创建的变量相同。注意,我没有赋值。因为这是同一个变量的重声明,所以旧值不应该像下面所描述的那样被覆盖:http://www.w3schools.com/js/js_variables.asp

创建具有以下内容的2个javascript文件: Script1

代码语言:javascript
复制
//create global variable with square bracket notation
window['y'] = 'old';

Script2

代码语言:javascript
复制
//redeclaration of the same variable
var y;

if (!y) y = 'new';

alert(y); //shows New instead of Old in IE

将这2个文件包括在html文件中

代码语言:javascript
复制
<html>
 <head></head>
 <body>

  <script type="text/javascript" src="my.js"></script>
  <script type="text/javascript" src="my2.js"></script>

 </body>
</html>

在火狐和Chrome中打开这个页面,提醒“老”,这是预期的行为。然而,在IE8中,页面实际上会警告“新”

对IE上发生这种情况的原因有什么想法吗?

EN

Stack Overflow用户

回答已采纳

发布于 2010-04-14 05:16:43

如果您希望y是全局的,则只需在第二个文件中完全删除var y行即可。

这背后的原因是,既然您希望y是全局的,那么就把它当作一个全局的,并且已经声明了。JavaScript在没有var前缀的情况下声明变量时使变量全局化的副作用在这种情况下对您有利。在IE8中测试,这是很好的工作。

编辑:至于为什么会发生这种情况,我认为这仅仅是IE处理跨文件和声明提升的全局处理中的一个bug。实际上,您应该只在一个地方声明任何变量,特别是全局变量。遵循这个经验法则可以避免你的问题。

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2635018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档