【发布时间】:2011-02-07 18:23:20
【问题描述】:
(在 cmets 之后创建一个单独的问题:Javascript redeclared global variable overrides old value)
我正在使用方括号表示法创建一个全局范围的变量,并在外部 js 文件中为其分配一个值。
在另一个 js 文件中,我声明了一个与我刚刚在上面创建的同名的 var。注意我没有赋值。由于这是对同一变量的重新声明,因此不应按照此处所述覆盖旧值:http://www.w3schools.com/js/js_variables.asp
创建 2 个包含以下内容的 javascript 文件: 脚本1
//create global variable with square bracket notation
window['y'] = 'old';
脚本2
//redeclaration of the same variable
var y;
if (!y) y = 'new';
alert(y); //shows New instead of Old in IE
在你的 html 文件中包含这两个文件
<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 中,页面实际上会提示“新”
关于为什么会在 IE 上发生这种情况的任何想法?
【问题讨论】:
-
如果将所有代码内联到 HTML 文件中会发生什么?它在 Firefox 3.5.8、Chrome 5.0.342.7 和 Konqueror 4.3.5 中为我提供了相同的结果(旧)。其他浏览器的结果会很有用。
-
如果将所有代码放在一个文件中,会发生提升,问题可能不会出现。
-
是的,如果您将所有代码放在一个位置,则警报会在所有浏览器上显示“旧”
标签: javascript internet-explorer internet-explorer-8 global-variables scope