ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Javascript重新声明的全局变量将覆盖旧值

2019-10-09 11:38:49  阅读:301  来源: 互联网

标签:javascript scope global-variables


前几天,我遇到了一个有趣的问题,想知道是否有人可以阐明为什么会这样.这就是我正在做的事情(出于本示例的目的,我已经稍微简化了示例):

>我正在使用方括号符号创建一个全局范围的变量,并为其分配一个值.
>后来我声明了一个与上面刚创建的变量同名的变量.注意我没有分配值.由于这是对同一变量的重新声明,因此不应按以下说明覆盖旧值:http://www.w3schools.com/js/js_variables.asp

//create global variable with square bracket notation
window['y'] = 'old';

//redeclaration of the same variable
var y;

if (!y) y = 'new';

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

>问题是旧值实际上确实被覆盖,例如在上面.警报显示“新”而不是“旧”.为什么呢

我猜想提出我的问题的另一种方法是,上述代码在语义上与下面的代码有何不同:

//create global variable 
var y = 'old';

//redeclaration of the same variable
var y;

if (!y) y = 'new';

alert(y); //shows Old

更新1:基于一些评论和答案,我将示例重述为更能反映我的原始问题.

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

//create global variable with square bracket notation
window['y'] = 'old';

SCRIPT2

//redeclaration of the same variable
var y;

if (!y) y = 'new';

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

在HTML文件中包含这2个文件

<html>
 <head></head>
 <body>

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

 </body>
</html>

在Firefox和Chrome浏览器中打开此页面会提示“旧”,这是预期的行为.但是,在IE 8中,该页面实际上会警告“新”

更新2问题已移至此处:Redeclared javascript global variable overrides old value in IE

解决方法:

?我刚刚测试了您的代码,它显示为“旧”,并且已经测试了FF,Chrome,Safari(PC)和IE8.

在这里查看:http://jsbin.com/ifare/edit

标签:javascript,scope,global-variables
来源: https://codeday.me/bug/20191009/1879000.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有