对不起这个问题,但这个问题真的搞砸了我的一天。为什么局部变量会杀死我的全局变量?
下面的代码提醒理所应当:
var globalId='10';
function check(){
alert(globalId);
}
check();
但是,这下面的代码警报未定义:
var globalId='10';
function check(){
alert(globalId);
var globalId;
}
check();
我知道,如果我在一个函数声明一个变量它是一个局部变量,但是如果我已经将其声明为全局变量,那么我的警报怎么会这么说?undefined?
这是一个简单的例子,但在我的原代码,我做了很多的东西在函数的开始之间,再长的路下来我检查,看看是否globalId
定义,否则定义它:if(!globalId){var globalId;}
这意味着生成我的警报坐落在函数的顶部定义,仿佛JavaScript的第一个执行的整体功能,只是为了看看是否有任何变量“可能”来声明,如果是的话,宣布他们,因此我的警报指出,一个“未申报的”变量。
任何人都可以向我解释,为什么出现这种情况,如果这是真的,JavaScript的执行函数之前的“前宣称”所有的变量,即使在条件声明的变量甚至没有见过面吗?
+1非常好的问题 – 2013-01-02 12:53:57
局部变量总会有对全球那些precendence。在C和大多数其他语言中是一样的。在C++中,您可以通过'::'选择全局变量。无论如何,命名全局变量和局部变量同样是一种不好的做法 – 2014-05-22 04:03:41