js中函数声明先提升还是变量先提升
根据官方书籍《你不知道的javascript》(上卷)中写道:
“函数会首先被提升,然后才是变量”。
例子:
console.log(foo);
function foo(){
console.log("函数声明");
}
var foo = "变量";
输出为:
function foo(){
console.log("函数声明");
}
代码实际是:
function foo(){
console.log("函数声明");
}
var foo;
console.log(foo);
foo = "变量";
函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖。
在最后再加上打印就能看到函数已经被覆盖了。
方式一
var a = 4;
function a(){
return 6
}
console.log(a) // 4
console.log(a()) // a is not a function
方式二
function a(){
return 6
}
var a =4;
console.log(a) // 4
console.log(a()) // a is not a function
同一个标识符的情况下,变量声明与函数声明都会提升;函数声明会覆盖变量声明,但不会覆盖变量赋值,即:如果声明变量的同时初始化或赋值那么变量优先级高于函数。