吊装过程中会发生什么?

时间:2019-04-21 03:36:53

标签: javascript hoisting

我正在经历javascript的提升概念。

    var a = 2;
    function a(){};
    typeof a 
    // "number"

    var a ;
    function a(){};
    typeof a 
    // "function"

我的问题是,为什么第一个代码具有typeof number而不是在代码的第二部分中可以看到的功能?

2 个答案:

答案 0 :(得分:2)

如果您破坏了第一个代码,它看起来像这样。在js中,函数声明会提升函数定义。

要显示功能声明以提升功能定义,您可以在声明之前调用功能a()

var a; // a is undefined
a();

function a() {
  console.log('function a');
}; // function is also hoisted
a = 2; // a is assigned a value
console.log(typeof a)

答案 1 :(得分:2)

函数声明比普通变量初始化更重要。
var声明的变量显示提升。 a的声明位于作用域的顶部,但在其编写的行中为其分配了值2

函数声明,即function a(){};声明了值,并且还在作用域顶部将值分配给了函数。因此,第一个示例中发生的是

var a = function(){};
a = 2;
console.log(typeof a) 

在第二个示例中,变量被初始化为函数。但是var a不会将a从函数更改为undefined

var a = function(){};
a; //this doesnot change a
console.log(typeof a);