案例1: 以下代码警告 10 :
var globalId='10';
function check(){
alert(globalId);
}
check();
案例2: 但是下一个代码警告 undefined :
var globalId='10';
function check(){
alert(globalId);
var globalId;
}
check();
对于案例2 ,解决方案是:
var globalId='10';
function check(){
var globalId; /**moved to top of the function due to hoisting and has an initial value of undefined. Hence, alert(globalId) return undefined. **/
alert(globalId); //undefined
var globalId;
}
check();
我现在的问题是,案例1 globalId
的价值如何10
?
答案 0 :(得分:1)
从不。在JavaScript中,在当前函数作用域中声明的变量始终优先于在外部作用域中声明的变量。
在你的第二个例子中,
var globalId='10';
function check(){
alert(globalId);
var globalId;
}
check();
解释器会自动将您的var globalId
声明移至顶部,从而产生:
var globalId='10';
function check(){
var globalId;
alert(globalId);
}
check();
这就是为什么它显示undefined
。
答案 1 :(得分:0)
我现在的问题是,在案例1中,globalId的值是10?
由于
var
,let
或const
来定位变量的范围。因此,它使用了定义函数check
的范围。
答案 2 :(得分:0)
它正在提升概念。查看有助于您理解概念Scope & Hoisting One more good article的链接。 快乐编码