我是js的新手并且玩简单的代码。当我运行以下代码时
var x=5;
function sum(){
alert(x);
var x=10;
alert(x);
}
sum();
我收到警告“未定义”和10。 但是,当我运行以下代码时,
var x=5;
function sum(){
alert(x);
x=10;
alert(x);
}
sum();
我将警报设为“5”和“10”
有人可以解释一下发生了什么吗?
注意:抱歉两次提供相同的代码。现在已经改变了:)。
由于
答案 0 :(得分:2)
您提供的功能受到吊装的影响。当你声明一个局部变量时,它会被提升到函数的顶部,这会使x未定义。
当解释器遇到函数时,它会提升局部变量x
,如:
var x=5;
function sum(){
var x;
alert(x); //local x is in scope and undefined
x=10;
alert(x);
}
sum();
在您提供的第二个函数中,不会发生提升,因为只有一个全局变量x
,并且该函数会使用其指定的值警告全局变量。
因此,两个函数之间的主要区别在于第一个函数使用两个变量,一个全局变量和一个局部变量,而第二个函数使用一个全局变量。在第一个函数中,局部变量被提升到函数的顶部,导致它为第一个警报输出undefined。