hoistFunction(); //等价于 /* function hoistFunction() { function foo() { console.log(2); } var foo; foo(); // 2
foo = function() { console.log(1); };//覆盖
foo(); // 1
foo(); // 1 }
hoistFunction(); */ 此例也可以看出函数提升与变量提升相比函数优先
1 2 3 4 5 6 7 8 9 10 11 12 13 14
console.log(typeof a); a(); var a = 3; functiona() { console.log(typeof a); } console.log(typeof a); a = 6; a(); //输出结果为 //function //function //number //a is not a function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
functionf() { console.log(typeof f); //function // var f = 3; f = 3; console.log(typeof f); //number };
f();
var s = functions() { console.log(typeof s); //function // var s = 3; s = 3; console.log(typeof s); //function }; s(); //声明中可以函数内部改变函数名,而函数表达式,如果有函数名,则函数名只能作用在其自身作用域中,且不可改变函数名