【问题标题】:Local and global variables inside a JavaScript functionJavaScript 函数中的局部变量和全局变量
【发布时间】:2020-10-16 04:12:47
【问题描述】:

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

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

【问题讨论】:

  • 没有。在第二种情况下,它返回局部变量文本,它在函数内部声明。 (这就是使它成为局部变量的原因。)但是在执行 return 时,变量还没有被赋值。
  • 在 JavaScript 中查找“变量提升”。

标签: javascript variables


【解决方案1】:

JavaScript hoists 你的变量声明,这样你的代码在功能上如下:

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 有关。

【讨论】:

    【解决方案2】:

    这与variable hoisting有关

    第二个示例中的代码按以下顺序执行:

    1. 声明全局变量text
    2. 将全局变量text的值设置为“top”
    3. 声明函数print
    4. 调用函数print
    5. 声明局部变量text(由于提升)
    6. 局部变量text的返回值(此时undefined
    7. 将局部变量text的值设置为“底部”

    它的执行就像是这样写的:

    var text = "top";
    function print() {
        var text;
        return (text);
        text = "bottom";
    }
    print();
    

    如您所见,text 的值是在实际定义之前返回的,因此它是undefined

    【讨论】:

      【解决方案3】:

      这是由于hoisting

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

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

      【讨论】:

        【解决方案4】:

        你的任务,

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

        【讨论】:

        • 要将值“bottom”重新分配给文本,它必须位于返回语句之前,以便可以访问。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多