我正在经历javascript的提升概念。
var a = 2;
function a(){};
typeof a
// "number"
var a ;
function a(){};
typeof a
// "function"
我的问题是,为什么第一个代码具有typeof number而不是在代码的第二部分中可以看到的功能?
答案 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);