2012-06-23 239 views
3

我遇到了一些JavaScript函數的問題,這些函數讓我撓了腦子大約一個小時,直到某些放置良好的alert()的東西讓我感到驚訝。看來,一個函數正在改變另一個函數的局部變量。我寫了一個簡單的測試腳本:一個函數改變另一個函數的局部變量?

function first() { 
    msg = "1111"; 

    second(); 

    alert(msg); 
    } 


function second() { 
    msg = "2222"; 
    } 

當我第一次調用()我期望得到一個警告框,說「1111」,但我得到「2222」代替。 second()如何影響屬於first()的局部變量?我錯過了什麼或者這是一個錯誤?

我使用的是Firefox 12.0。使用var語句時

+2

在函數內部沒有'var msg ...'的地方不是本地的。 –

+1

https://developer.mozilla.org/en/JavaScript/Guide/Values%2C_Variables%2C_and_Literals#Variable_scope(如果您是JavaScript新手,整本指南都值得一讀) –

+0

我曾經對變量作用域感到困惑,然後我學會了[閉嘴並熱愛封閉範圍](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work)。 –

回答

5

變量只地方:

var msg = "1111"; 

否則價值釋放到全球範圍。

+0

不挑剔,但「1111」和「2222」也有點奇怪。 –

+0

哈哈,在幾年的JavaScript和JavaScript(我爲愛好而不是爲了工作而做),這直到現在完全迴避我。我已經把'var'放在'msg = ...'前面,並且按預期工作。謝謝! – Iain

+0

只要將它想象成沒有'var'來聲明變量,它就會假定變量存在於全局範圍中。 – matt3141

相關問題