2017-09-04 295 views
0

我有一個HTML文件test.html其中有兩個變量,名稱分別爲location,一個全局變量和一個局部變量。但是,當我在瀏覽器中打開它時,它只是說Your file was not found,地址欄顯示爲file://Los%20Angeles而不是file://test.html,如預期的那樣。爲什麼?具有相同名稱的全局變量和局部變量使用Javascript

<html> 
<body> 
<script type="text/javascript"> 
var location = "Los Angeles" 
function showLocation() { 
    var location = "San Francisco" 
    document.write(location) 
} 
</script> 
<input type="button" onclick="showLocation()" value="Show Location"/> 
</body> 
</html> 

回答

3

'location'是javascript中的保留關鍵字。只需將您的變量名稱改爲其他名稱即可。 欲瞭解更多有關保留字的信息:https://www.w3schools.com/js/js_reserved.asp

+1

另外,既然你已經聲明瞭一個範圍(全局變量)以外的變量,如果你的目標是修改這個值,你所要做的就是隻調用你的函數內的變量,併爲它分配一個新的值,無需再次聲明。 – jhek

+0

@jhek謝謝。我只是想測試使用相同名稱來聲明全局變量和局部變量的結果。 –

+0

謝謝!我從來沒有想過保留關鍵字:) –

1

設置全局location會導致瀏覽器轉到該URL。它不是保留字 - 它是在窗口對象上定義的變量。這裏是保留字的更好的列表:

https://docs.microsoft.com/en-us/scripting/javascript/reference/javascript-reserved-words

在你的榜樣,您正在設置全球location爲「洛杉磯」,這將導致窗口瀏覽到,如果它是一個相對URL。

設置var location = "San Francisco"在你的函數內對window對象沒有影響,因爲函數變量有自己的作用域。

所以,你可以這樣做:

function showLocation() { 
    var location = "San Francisco" 
    document.write(location) 
} 

,並預期它會奏效。它會將字符串'San Francisco'寫入文檔。

如果你是一個現代的瀏覽器,你可以看到發生了什麼事情通過努力使設置「位置」「讓」:

let location = "los angeles" 

現在你會得到一個錯誤,指出這樣的:

SyntaxError: Can't create duplicate variable that shadows a global property: 'location'