function declaration(函式宣告)
和 function expression(函式表達式)
兩種都屬於JavaScript定義函式的一種方式。
function declaration
function functionName(){
// do someting...
}
function expression
const expression = function(){
// do someting...
}
function declaration
與var
都有著"hoisting"(提升)的特性,這代表可以在宣告之前調用這個函式。
console.log(a) // 輸出 undefined
var a = 1
a(2, 2) // 輸出 4
function a(a, b){
return a * b
}
但是function expression
則是執行到它這行才會開始運作,因此以下程式碼如果在函式之前先呼叫,則不會正確執行。
a(2, 2) // 錯誤:ReferenceError: a is not defined
const a = function(a, b){
return a * b
}
Function Declaration
由於它的提升特性,它通常存儲在全域或函式作用域。Function Expression
通常存儲在變數中。
Function Declaration(函式宣告)的名稱直接存在於其所在的作用域:
function declareFunction() {
return "Function Declaration";
}
console.log(declareFunction()); // 輸出: "Function Declaration"
console.log(window.declareFunction()); // 在瀏覽器中,它也存在於全域物件上
Function Expression(函式表達式)則存儲在變數中:
const expressionFunction = function() {
return "Function Expression";
};
console.log(expressionFunction()); // 輸出: "Function Expression"
console.log(window.expressionFunction); // 在瀏覽器中,這會輸出 undefined,除非它被定義為全域變數