【问题标题】:scope of variable in javascript with inner/nested functions when redeclared [duplicate]重新声明时具有内部/嵌套函数的javascript中变量的范围[重复]
【发布时间】:2019-04-07 09:59:37
【问题描述】:
var name="prevName";
function printName(){
   console.log(name);
   var name="newName";
}
printName();

打印未定义

var name="prevName";
function printName(){
    console.log(name);
}
printName();

打印 prevName

我不明白为什么

你能请任何人解释原因吗?

提前谢谢....

【问题讨论】:

  • 查看链接副本的答案。在您的第一个示例中,您正在打印 local name,它在您打印它的位置具有值 undefined,就像代码看起来像这样:var name="prevName"; function printName() { var name = undefined; console.log(name); name="newName"; } printName(); .在您的第二个示例中,您正在打印 printName 关闭的 name,因为您尚未在本地声明它。

标签: javascript node.js var


【解决方案1】:

JavaScript 中的变量(和函数声明)被提升,即它们的声明在编译时移动,直到它们作用域的开始(它们的函数或模块)。 但是任务没有被提升。这就是第一个函数打印 undefined 的原因——局部变量替换了外部变量,但在调用日志之前它是未定义的。

【讨论】:

    【解决方案2】:

    在第一种情况下,内部var name(不同于全局name)将hoisted 获取到函数顶部。所以和

    var name = "prevName";
    function printName(){
       var name; // name = undefined
       console.log(name);
       name = "newName";
    }
    printName();

    在第二种情况下,您处理全局变量。

    【讨论】:

      猜你喜欢
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2011-07-10
      • 2023-04-08
      • 2019-08-21
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多