A =2; Var a ; console.log(a); 会输出啥? 结果: 2 |
它会将当前作用域的所有变量的声明提升到程序的顶部
Console.log(a); Var a=2; 输出 undefined |
为什么会有這种现象?
js和其他语言一样,都要经历编译和执行阶段,js在编译的时候,会收集所有的变量并且提前声明变量,而其他语言不会。所以他在第一步就已经执行了。
Foo(); Function foo(){ Console.log(“1”)} Function foo(){ Console.log(“2”)} 答案是 ‘2’,因为有多个函数声明 的时候,是由最后面的函数声明来替代前面的。 |
Foo(); Var foo = function (){ Console.log(“foo”); } 分析:一部分是var foo ,而一部分是foo =function(){} 答案:报TypeError (因为foo声明但未赋值,因此foo是undefined) |
总结:
- js会将变量的声明提升到js顶部执行。
- 变量提升的本质是由于js引擎在编译的时候,就会将所有的变量声明了,所以在执行的时候,所有变量就完成了声明。
- 当有多个变量声明的时候,函数声明会覆盖其他的声明,如果有多个函数声明,则由最后一个覆盖之前的。