gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 10:32:39 25 4
gpt4 key购买 nike

前几天我遇到了一个有趣的问题,想知道是否有人可以解释为什么会发生这种情况。这是我正在做的事情(出于本示例的目的,我稍微简化了示例):

  • 我正在使用方括号表示法创建一个全局范围的变量并为其分配一个值。
  • 后来我声明了一个与上面刚刚创建的变量同名的变量。请注意,我没有分配值。由于这是同一变量的重新声明,因此旧值不应被覆盖,如下所述: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
  • 问题是旧值实际上确实被覆盖了,在上面的例子中。警报显示"new"而不是“旧”。为什么?

我想陈述我的问题的另一种方式是上面的代码在语义方面与下面的代码有何不同:

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

//redeclaration of the same variable
var y;

if (!y) y = 'new';

alert(y); //shows Old

更新 1:根据一些评论和答案,我重新表述了该示例,以更好地反射(reflect)我原来的问题。

<罢工>

创建 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

将这 2 个文件包含在您的 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 中,页面实际上会警告"new"

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

最佳答案

当您使用 var y; 重新声明 y 时,它现在未定义,因此 if(!undefined) 的计算结果为 true。

Add another alert in your example to see this :

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

//redeclaration of the same variable
var y;
alert(y); //undefined

if (!y) y = 'new';

alert(y); // new

var 不会两次初始化变量,但它会覆盖第一次未初始化的变量(因为它是一个新的、更局部的变量),即 window['y' ] 样式执行此操作,将其添加到窗口对象中。以此为例:

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

//redeclaration of the same variable
var y;
alert(y); //undefined

alert(window.y); //old

if (!y) y = 'new';

alert(y); //shows New instead of Old
alert(window.y);​ //still old

关于Javascript重新声明的全局变量覆盖旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2634410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com