对不起这个问题,但这个问题真的搞砸了我的一天。
以下代码按照应有的方式提醒10:
var globalId='10';
function check(){
alert(globalId);
}
check();
但是接下来的代码会提示undefined:
var globalId='10';
function check(){
alert(globalId);
var globalId;
}
check();
我知道如果我在函数中声明一个变量,它是一个局部变量,但是如果我已经将它声明为全局变量,我的警报怎么会说undefined?
这是一个简单的例子,但在我的原始代码中,我在函数开头之间做了很多事情,然后在很长一段时间内我检查是否globalId
已定义,否则定义它:if(!globalId){var globalId;}
这意味着我的警报位于函数顶部生成未定义,就好像 JavaScript 首先执行了整个函数,只是为了查看是否“可能”声明了任何变量,如果是,则声明它们,因此我的警报指向一个“未声明”的变量。
任何人都可以向我解释为什么会发生这种情况,如果 JavaScript 在执行函数之前“预先声明”所有变量是真的,甚至在条件不满足的情况下声明的变量也是如此?