JavaScript函数中的本地变量和全局变量

6

我正在学习JavaScript全局变量和局部变量,但是对于这个特定的函数感到困惑。

var text = "top";
function print() {
    return (text);
}
print();
// Returns 'top'

我明白为什么它返回“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


不,在第二种情况下,它返回的是在函数内部声明的局部变量text。(这就是它成为局部变量的原因。)但是在执行return语句时,该变量尚未被赋值。 - Joel Lee
4
在 JavaScript 中查找“变量提升”。 - gen_Eric
4个回答

6

JavaScript 提升您的变量声明,使得您的代码在功能上等同于以下内容:

var text = "top";
function print() {
    var text;
    return (text);
    // Unreachable code below
    text = "bottom";
}
print();
// Returns undefined

当你执行return(text)时,由于在函数中声明的text尚未定义,且text="bottom"无法到达,因此print()返回undefined

请参见JavaScript 中变量的作用域是什么?了解更多信息。本问题与第7个案例有关。


2
这与变量提升有关。
第二个例子中的代码按以下顺序执行:
  1. 声明全局变量 text
  2. 将全局变量 text 的值设置为 "top"
  3. 声明函数 print
  4. 调用函数 print
  5. 声明局部变量 text(由于变量提升)
  6. 返回局部变量 text 的值(此时为 undefined
  7. 将局部变量 text 的值设置为 "bottom"
它的执行方式就像是这样写的:
var text = "top";
function print() {
    var text;
    return (text);
    text = "bottom";
}
print();

正如你所看到的,text的值在实际定义之前被返回,因此它是undefined

0

这是由于变量提升的原因。

变量提升指的是变量和函数声明被物理上移动到代码的顶部。

您可以在这里获取示例和解释。


-1

你的任务:

var text = "bottom";

跟在 return 函数后面,所以不适当。这是一个无法到达的语句。

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 statement.
}
alert(print());
// Returns undefined


要重新分配值“bottom”到文本中,它必须在返回语句之前出现,以便它可以被访问到。 - Jerry Okafor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接