我正在学习JS全局和局部变量,但我对这个特定函数感到困惑。
var text = "top";
function print() {
return (text);
}
print();
//returns 'top'
我明白为什么它会回归顶峰。 var text
是一个全局变量。 print()
函数可以访问它并返回text
,从而返回'top'
。
var text = "top";
function print() {
return (text);
var text = "bottom";
}
print();
// returns undefined
我对全局变量和局部变量有基本了解(或者我认为)。我知道函数print
可以访问自己的局部加全局变量。
我不明白为什么会返回undefined
。据我所知,行return text;
检索它可以访问的全局变量text
(如第一个代码块所示)。返回text = 'top'
后,它还声明了自己的局部变量,其名称相同但值不同'bottom'
。据我所知,局部变量bottom
应该坐在那里,因为它没有被提前调用。
为什么它没有显示top
(甚至显示bottom
),而是显示undefined
?
答案 0 :(得分:6)
Javascript提升您的变量声明,使您的代码功能如下:
var text = "top";
function print() {
var text;
return (text);
// unreachable code below
text = "bottom";
}
print();
// returns undefined
由于当您点击text
时尚未定义您的函数中声明的return(text)
,并且text="bottom"
无法访问,print()
会返回undefined
有关详情,请参阅What is the scope of variables in Javascript。这个问题涉及案例7。
答案 1 :(得分:2)
第二个示例中的代码按以下顺序执行:
text
text
的值设置为“top”print
print
text
(由于悬挂)text
(此时为undefined
)的返回值text
的值设置为“bottom”它被执行就像是这样写的:
var text = "top";
function print() {
var text;
return (text);
text = "bottom";
}
print();
如您所见,text
的值在实际定义之前返回,因此它是undefined
。
答案 2 :(得分:0)
答案 3 :(得分:-1)
你的任务:
var text = "bottom";
返回功能后出现所以这是不恰当的,这是无法实现的陈述
var text = "top";
function print() {
return (text);
//var text = "bottom";
//the above assignment comes after a return function
//so it is not proper, it is unreachable statemen
}
alert(print());
// returns undefined