非常抱歉问这个问题,但这个问题真的让我一整天都被困扰。
以下的代码会像它应该的那样弹出一个警告框,显示10:
var globalId='10';
function check(){
alert(globalId);
}
check();
但是下面的代码会弹出一个未定义的警告框:
var globalId='10';
function check(){
alert(globalId);
var globalId;
}
check();
我知道如果我在函数内声明一个变量,它是局部变量。但如果我已将它声明为全局变量,为什么我的警报会显示“未定义”?这是一个简单的例子,但在我的原始代码中,我在函数开头之间做了很多事情,然后很长一段时间我检查是否定义了
globalId
,否则定义它:if(!globalId){var globalId;}
这意味着我的警报位于函数顶部生成了未定义,就好像JavaScript首先执行整个函数,只是为了看看是否可能声明任何变量,如果是,声明它们,因此我的警报指向一个“未声明”的变量。有人能解释一下为什么会发生这种情况吗?如果JavaScript "预先声明"所有变量在执行函数之前,甚至条件不符合的变量也声明了吗?
::
选择全局变量。无论如何,将全局变量和本地变量命名类似是一种不好的做法。 - phuclv