2013-12-08 42 views
-1
function x() { 
    if(true) { 
     var y = "hello world"; 
    } 
    alert(y); 
} 
x() 
alert(y) 

當我運行這段代碼時,它會提醒兩次「Hello world」。局部變量仍然可以訪問該函數嗎?

我閱讀關於範圍的教程,並且他們不應該可以通過第二個提示訪問y

爲什麼它是可訪問的?提前致謝!!

+8

不是。你確定你沒有在函數之外定義'y'嗎? – Blackhole

+1

當我運行你的代碼時,我得到了一個警告與你好世界:http://jsfiddle.net/Q9eFU/應該有另一個y定義以外的x()範圍 –

+0

我剛剛嘗試過。它只顯示一條警報 –

回答

3

不,它不警告兩次。 (我確實在IE,Firefox和Chrome中測試過這個)。

變量對函數是局部的,所以試圖在函數外部使用它會導致引用錯誤。


如果你確實看到behavoir,那是因爲你已經用相同的名字在全球範圍內也是同樣的價值定義的變量。

+0

我很確定這不是原因,但我使用Fedora,而不是Windows .. – Billie

+0

@ user1798362:這對於Javascript語言如此基礎的東西應該沒有任何區別。有很多browswer的差異,但在Javascript語言本身很少。 – Guffa

0

變量y不應該在函數之外訪問。當我測試它時,它無法訪問。

您可能實際上已經在全局範圍的某個地方定義了變量y,這可能是什麼被警告。

JavaScript中的局部變量只能在本地範圍內訪問,而全局變量(在函數外部定義的變量)可以在任何地方訪問,即使在函數內部也是如此。

在你的情況,我懷疑可能有另一個「y」變量定義在全球範圍內的某處。


你也確定你沒有運行你的腳本兩次嗎?在這種情況下,您可能會從兩次調用x()函數兩次獲取警報。

另一個原因是,您的頁面上可能會運行另一個腳本,其全局範圍中定義了ay變量,並且當它與此腳本結合時,它會提醒在全局範圍內定義的y變量其他腳本。

相關問題