Function Expression (ν•¨μˆ˜ ν‘œν˜„)

<aside> πŸ’‘ ν•¨μˆ˜ 이름(); : ν•¨μˆ˜ 호좜

ν•¨μˆ˜ 이름(); : ν•¨μˆ˜ 호좜

const val = ν•¨μˆ˜ 이름; β†’ ν•¨μˆ˜ 자체λ₯Ό λ°˜ν™˜

const val = ν•¨μˆ˜ 이름(); β†’ ν•¨μˆ˜μ˜ return 값을 λ°˜ν™˜

</aside>

const print = function () { // -> ν•¨μˆ˜λŠ” λ‹€λ₯Έ λ³€μˆ˜μ²˜λŸΌ μ·¨κΈ‰λ©λ‹ˆλ‹€. (A)
    // anonymous function - 이름이 μ—†λŠ” ν•¨μˆ˜
    console.log('print');
};
print();

const printAgain = print;
printAgain(); // -> λ‹€λ₯Έ ν•¨μˆ˜μ— μ˜ν•΄ λ°˜ν™˜ 될 수 μžˆμŠ΅λ‹ˆλ‹€. (C)

function sum(a, b) {
    return a + b;
}
const sumAgain = sum;
console.log(sumAgain(1, 3)); // -> λ‹€λ₯Έ ν•¨μˆ˜μ— 인수(argument)둜 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. (B)

Function Declarations (ν•¨μˆ˜ μ„ μ–Έ)

testFunc(); // 'test-dumy' (hoisting - ν•¨μˆ˜ μ„ μ–Έ)

function testFunc() {
    console.log('test-dumy');

    console.log(testVal); // undefined (hoisting - var λ³€μˆ˜)
    var testVal = 'hi!';
}

Callback function

function randomQuiz(answer, printYes, printNo) { // 인자(parameter) : ν•¨μˆ˜
    if(answer === 'love you') {
        printYes();
    }
    else {
        printNo();
    }
}

const printYes = function () {     // anonymous function
    console.log('yes!');
};

const printNo = function print() { // named function
    console.log('no');
};

randomQuiz('wrong', printYes, printNo);    // no
randomQuiz('love you', printYes, printNo); // yes!
//randomQuiz('wrong'); // error

Arrow frunction