我有一天遇到了一個有趣的問題,並想知道是否有人可以闡明爲什麼會發生這種情況。這是我在做什麼(爲了這個例子的目的,我已經淡化了這個例子):Javascript redeclared全局變量覆蓋舊值
- 我使用方括號表示法創建一個全局作用域變量併爲其賦值。
後來我聲明瞭一個與我剛纔創建的名稱相同的變量。注意我沒有分配一個值。由於這是同一個變量的重複聲明如下描述的舊值不應該被重寫: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
你簡單化了,一定發生了,所有的代碼是在功能部分,提供無功雅不同範圍比window.y – kennebec 2010-04-14 02:35:08
你的更新應該是一個新的問題,特別是因爲它是瀏覽器特定的。 – 2010-04-14 04:31:58