💡 함수 표현식에 대해 공부해보자!
function
은function
의 인자로 전달이되며,👇👇👇 그것이 가능하게 한 것이 바로 Function expression
👇👇👇
const print = function () {
console.log('print');
};
print(); // print
function
에 이름이 없고 function
이라는 키워드를 이용해서 파라미터와 블럭을 이용한 것을 위에서 확인할 수 있다. (함수 이름 없이 필요한 부분만 작성해서 변수에 할당 가능)annoymous function
이라고 함const print = function print() { // named function
console.log('print');
};
named function
이라고 함const printAgain = print;
// 함수를 호출하듯이 작성하면 print에 할당된 print 함수가 실행된다.
printAgain(); // print
print
를 또 다른 변수에 할당하게 되면 결국 printAgain
은 위에 함수를 가르키고 있기 때문에 다시 함수를 호출하듯이 부르면 프린트가 출력되는 것을 확인할 수 있다.Function expression
은 할당된 다음부터 호출이 가능print
를 선언하기도 전에 호출하면 error
가 발생Function declaration
은 hoist가 가능하다.function randomQuiz(answer, printYes, printNo) {
if (answer === 'love you') {
printYes();
} else {
printNo();
}
}
randomQuiz
함수는answer
이 맞으면 호출하게 될 함수 -> printYes
answer
이 틀리면 호출하게 될 함수 -> printNo
printYes
, printNo
함수 2개를 전달해준다.Callback function
이라고 함love you
인 경우에만 printYes
라는 콜백함수를 호출하게 되고, 정답이 아니면 printNo
라는 콜백함수를 호출하게 된다.// annoymous function
const printYes = function () {
console.log('yes!');
}
// named function
const printNo = function print() {
console.log('no!');
}
randomQuiz('wrong', printYes, printNo); // no!
randomQuiz('love you', printYes, printNo); // yes!
printYes
라는 변수에 yes!
를 출력하는 함수를 할당printNo
라는 변수에 no!
를 출력하는 함수를 할당 randomQuiz
를 호출할 때, printYes
, printNo
라는 콜백 함수들을 각각 전달하게 된 것!// named function
const printNo = function print() {
console.log('no!');
}
Function expression
에서 이름을 쓰는 경우는const printNo = function print() {
print();
}
call stack
이 다 찾다는 에러가 뜸annoymous function
이다.const simplePrint = function () {
console.log('simplePrint!');
} // 1번
const simplePrint = () => console.log('simplePrint!'); // 2번
const add = function (a, b) {
return a + b;
} // 1번
const add = (a, b) => a + b; // 2번
const simpleMultiply = (a, b) => {
// do something more
return a * b;
};
return
키워드를 사용해서 값을 리턴해줘야한다.function hello() {
console.log('IIFE');
}
hello(); // hello
hello();
함수를 호출하는 방식을 원래 사용했지만(function hello() {
console.log('IIFE');
})();
()
로 감싸고, 끝에 함수를 호출 하듯이 ()
를 적어주면 -> 바로 함수가 호출된다.function calculate(command, a, b) {
switch (command) {
case 'add':
return a + b;
case 'substract':
return a - b;
case 'divide':
return a / b;
case 'multiply':
return a * b;
case 'remainder' :
return a % b;
default :
throw Error('unknown command');
}
}
console.log(calculate('add', 2, 3)); // 5
➕ 추가로 공부할 것
1. var hoisting 복습하기
2.Callback function
공부
3. recursive 함수 찾아보기
4. call stack 찾아보기