函數表達式和函數聲明的區別
/*
同一做用域下的函數聲明會提高, 因此能夠在函數聲明的位置前面調用函數
函數表達式則不能
*/
sayHello(); // 能夠運行
console.log(sayHello.toString());
// sayHi(); // 報錯
function sayHello() {
console.log("hello");
}
var sayHi = function() {
console.log("hi");
}
var Greet = function() {
greet();
console.log(greet.toString());
function greet() {
console.log('greet Statement');
}
var greet = function() {
console.log("greet Expression");
}
}
Greet();
特殊狀況
/*
*條件式函數聲明跟函數表達式的處理方式同樣。所以,條件式函數聲明喪失了函數聲明提高的特性*
*/
// statement(); //Uncaught TypeError: statement is not a function
if (true) {
function statement() {
console.log("statement");
}
} else {
function statement() {
console.log("statement2");
}
}
statement();