繁体   English   中英

Javascript 吊装代码片段

[英]Javascript hoisting code snippet

我正在浏览 JS 提升的代码片段。 其中一个片段看起来像

var employeeId = 'abc123';

function foo() {
    employeeId();
    return;

    function employeeId() {
        console.log(typeof employeeId);
    }
}
foo(); 

output 将是: function

我已经阅读了有关提升的信息,并且根据我的理解,所有变量都将被视为在 function 的顶部声明并在其实际声明/定义的行中初始化。 在这种情况下, employeeId function 标识符将在 function 的顶部声明为var employeeId ,其值显然undefined ,因此 function 的第一行应该抛出错误。

请让我知道为什么 output 是function

var声明和函数声明都被提升到它们出现的作用域的顶部(按这个顺序); var s 获得undefined作为它们的值,函数的绑定将函数作为它们的值。 只有在完成之后,才会执行函数中的任何分步代码。

因此,您的示例实际上与此相同:

var employeeId;                           // Declaration
function foo() {                          // Declaration
    function employeeId() {               // Declaration (shadows outer `employeeId`)
        console.log(typeof employeeId);
    }

    employeeId();
    return;
}
employeeId = 'abc123';
foo(); 

因此函数的第一行应该抛出错误。

函数声明与值一起提升(除非它在内部块中声明)。

在您的代码中,

var employeeId = 'abc123';

function foo() {
    console.log(employeeId); //will print function body
    return;
      function employeeId() {
        console.log(typeof employeeId);
      }
}

但如果函数声明在内部块内

var employeeId = 'abc123';

function foo() {
    console.log(employeeId); //will print undefined
    {
      function employeeId() {
        console.log(typeof employeeId);
      }
    }
    return;
}

发生这种情况 function 声明在变量之前被提升。

在 JavaScript function 和变量声明被提升到执行上下文的顶部。 您需要记住这三个规则。

  1. 变量和 function 声明被提升到执行上下文的顶部。
  2. 只有声明被提升,分配不会被提升。 赋值发生在声明变量的地方。
  3. function声明在提升中优先于变量声明。 在此处输入图像描述

https://www.codingame.com/playgrounds/7974/understanding-hoisting-in-javascript

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM