了解函数d的javascript范围
我是js新手,喜欢玩简单的代码。当我运行以下代码时了解函数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” 有人能解释一下发生了什么事吗 注意:很抱歉给相同的代码两次。现在已更改
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:现在是了。最初不是: