理解javascript函数范围

时间:2014-01-19 20:04:16

标签: javascript

我是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”

有人可以解释一下发生了什么吗?

注意:抱歉两次提供相同的代码。现在已经改变了:)。

由于

1 个答案:

答案 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。