2012-06-23 95 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

相关问题