(在评论后创建一个单独的问题:Javascript redeclared global variable overrides old value)
我正在使用方括号表示法创建一个全局范围的变量,并在外部js文件中为它分配一个值。
在另一个js文件中,我声明一个var,其名称与我刚才创建的变量相同。注意,我没有赋值。因为这是同一个变量的重声明,所以旧值不应该像下面所描述的那样被覆盖:http://www.w3schools.com/js/js_variables.asp
创建具有以下内容的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将这2个文件包括在html文件中
<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上发生这种情况的原因有什么想法吗?
发布于 2010-04-14 05:16:43
如果您希望y是全局的,则只需在第二个文件中完全删除var y行即可。
这背后的原因是,既然您希望y是全局的,那么就把它当作一个全局的,并且已经声明了。JavaScript在没有var前缀的情况下声明变量时使变量全局化的副作用在这种情况下对您有利。在IE8中测试,这是很好的工作。
编辑:至于为什么会发生这种情况,我认为这仅仅是IE处理跨文件和声明提升的全局处理中的一个bug。实际上,您应该只在一个地方声明任何变量,特别是全局变量。遵循这个经验法则可以避免你的问题。
https://stackoverflow.com/questions/2635018
复制相似问题