了解函数d的javascript范围

了解函数d的javascript范围,javascript,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” 有人能解释一下发生了什么事吗 注意:很抱歉给相同的代码两次。现在已更改

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

有人能解释一下发生了什么事吗

注意:很抱歉给相同的代码两次。现在已更改:)


谢谢

您提供的功能正受到提升的影响。当您声明一个局部变量时,它会被提升到函数的顶部,这使得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。

我看不到代码片段之间的差异。我怀疑它们产生不同的输出。这两种代码是相同的@Felix代码不同,第一个示例在函数中使用var x=10,而第二个示例不使用。@Metalskin:现在是了。最初不是: