*函数表达式实质上就是变量提升,另外函数提升的优先级比变量提升高
//函数声明
function fn1(){
console.log(111)
}
//函数表达式
var fn2 = function () {
console.log(222)
}
//函数提升后
f1() //123
f2() //error:f2 is not a function
// 函数声明
function f1() {
console.log(111)
}
// 函数表达式
var f2 = function() {
console.log(222)
}
*函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖。
console.log(foo);
function foo(){
console.log("函数声明");
}
var foo = "变量";
//输出
function foo(){
console.log("函数声明");
}
//实际编译成
function foo(){
console.log("函数声明");
}
var foo;
console.log(foo);
foo = "变量";
//再次输出console.log(foo) => 打印 "变量"