Javascript提升代码段

时间:2018-02-22 15:00:02

标签: javascript hoisting

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

function

输出结果为:employeeId

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

请让我知道为什么输出为class ALinearState(val items: List<Item>) : LinearState data class Item(name: String, ...)

2 个答案:

答案 0 :(得分:1)

两个var声明和函数声明都被提升到它们发生的范围的顶部(按此顺序); var获取undefined作为其值,函数的绑定将函数作为其值。只有在完成之后才能执行的函数中的任何分步代码。

所以你的例子实际上与此相同:

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

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

答案 1 :(得分:0)

  

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

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

在您的代码中,

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;
}