function t()
{
var x = 1;
if(true)
{
var x = 2;
alert(x);
}
alert(x);
}
t();
任何人都知道原因吗?
答案 0 :(得分:6)
因为JavaScript(井ECMAScript)没有块范围(yet)。只是功能范围。
实际上只有一个变量声明被提升到函数的顶部,因此x=2
会覆盖1
的初始值。
function t()
{
var x = 1;
// v---------immediately invoked function to create a new scope
(function() {
// new variable scope
if(true)
{
var x = 2;
alert(x); // 2
}
})();
alert(x); // 1
}
t();
答案 1 :(得分:3)
'var'关键字适用于整个函数,因此您拥有的代码的行为与此相同:
function t() {
var x = 1;
if (true) {
x = 2;
alert(x);
}
alert(x);
}
t();
答案 2 :(得分:1)
Javascript中的变量是作用于函数的范围,而不是块。你有两个var
,但实际上只有一个x
。