console.log(a); // f a() {console.log(10)}
console.log(a()); // undefined
var a = 3;
function a() {
console.log(10) //10
}
console.log(a) //3
a = 6;
console.log(a());
相当于
var a = funtion () {
console.log(10)
}
var a;
console.log(a); // f a() {console.log(10)}
console.log(a()); // undefined
a = 3;
console.log(a) //3
a = 6;
console.log(a()); //a() is not a function
创建函数有两种形式,一种是函数声明,另外一种是函数字面量,只有函数声明才有变量提升
- 函数声明会置顶
2)变量声明也会置顶
3)此可见函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖(JS引擎对于重复声明的规定是以最近的变量指定(也就是赋值)作为变量在执行时的值,所以第二个var a其实相当于无效)。
4)变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置