函式在 JavaScript 中為物件型別,以下列出它一般的物件差別
{} 能撰寫程式碼() 能傳遞參數this 和執行環境return 能回傳值範例:
function fn(parameter) {
    const localVariable = '區域變數';
    console.log(this, localVariable);  // this、區域變數
    return `附加一段${parameter}`  // 回傳
};
const data = fn('參數');  // 呼叫函式
console.log(data);

在範例中可以看出函式擁有自己的 this 和變數,
以及回傳參數和被呼叫的能力,
而 functionA('參數') 為表達式,
因此能夠將函式中 return 的結果賦予到變數 data 中,
所以 data 的值會是函式中 return 的內容,
接著我們來看函式陳述式和函式表達式的內容
我們先來看函式陳述式的結構
function fnA() {
    console.log('函式陳述式', '具名函式');
    console.log(fnA);
};
fnA();

當我們顯示 fnA 時,
會看見 f 的後方會顯示函式名稱 fnA,
這種函式稱為具名函式,
而函式陳述式一定要給名稱,
因此函式陳述式都是具名函式
接著看函式表達式
const fnB = function() {
    console.log('函式表達式', '匿名函式');
    console.log(fnB);
};
fnB();

當我們顯示 fnB 時,
會看見 f 的後方沒有函式名稱,
這類函式則稱為匿名函式,
但函式表達式也能使用具名函式
const fnC = function fnD() {
    console.log('函式表達式', '具名函式')
    console.log(fnC);
    console.log(fnD);
};
fnC();

當我們顯示 fnC 和 fnD 時,
會發現雖然宣告的變數為 fnC,但顯示的函式名稱都是 fnD,
那是因為我們在宣告函式時,就已經給它函式名稱 fnD,
但有一點要注意,
函式表達式中具名函式的函式名稱只能在函式內呼叫,在函式外呼叫會出錯
const fnC = function fnD() {};
console.log(fnD);
