language/javascript
Function
건망디
2021. 11. 25. 20:33
1. Function
- 재사용이 가능하다.
- 한 가지의 task를 수행하거나 value를 계산하기 위해 사용된다.
- object의 일종이다.
1-1. Function declaration
function name(param1, param2) { body... return; }
2. Parameters
- premitive parameters: 메모리에 value가 그대로 저장, value가 전달
- object parameters: 메모리에 reference가 저장, reference가 전달
3. Default parameters (added in ES6)
function showMessage(message, from = 'unknown') {
// from이 undefined일 때, default 값 명시
console.log(`${message} by ${from}`);
}
showMessage('Hi!');
4. Rest parameters (added in ES6)
function printAll(...args) {
// (...)를 작성하여 배열 형태로 전달
// args는 3개의 값이 담긴 배열
for (let i = 0; i < args.length; i++) {
console.log(args[i]);
}
for (const arg of args) {
console.log(arg);
}
args.forEach((arg) => console.log(arg));
}
printAll('dream', 'coding', 'ellie');
// 인자 3개 전달
5. Local Scope
let globalMessage = 'global'; // global variable
function printMessage() {
let message = 'hello';
console.log(message); // local variable
console.log(globalMessage);
function printAnother() {
console.log(message); // 접근 가능
let childMessage = 'hello'; // 부모에서 여기로 접근 불가
}
console.log(childMessage); // 에러 발생
}
printMessage();
console.log(message); // 에러 발생
- 밖에서는 안이 보이지 않고, 안에서만 밖을 볼 수 있다.
6. Return a value
function sum(a, b) {
return a + b;
}
const result = sum(1, 2); // 3
console.log(`sum: ${sum(1,2)}`);
7. Early return, early exit
// bad
// ~일 때 ~한다
// block안에서 logic을 많이 작성하면 가독성 떨어진다.
function upgradeUser(user){
if (user.point > 10) {
// long upgrade logic...
}
}
// good
// 조건이 맞지 않을때는 빠른 return 후 함수 종료
// 조건 맞을 때만 필요한 logic들 실행
function upgradeUser(user){
if (user.point <= 10) {
return
}
// long upgrade logic...
}
8. Function expression
const print = function () { // anonymous function
console.log('print');
};
print();
const printAgain = print;
printAgain();
const sumAgain = sum;
console.log(sumAgain(1, 3));
const print = function print () { // named function
console.log('print');
};
- Function expression
- 할당된 다음부터 호출 가능
- 위의 print 함수를 선언하기 전에 호출하면 에러
- Function declaration
- hoisting이 된다
- 함수가 선언되기 이전에 호출해도 된다.
9. Callback function using function expression
function randomQuiz(answer, printYes, printNo) {
if(answer === 'love you') {
printYes();
} else {
printNo();
}
}
// anonymous 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!
- Callback function: 함수를 전달해서, 맞는 상황에 따라 함수 호출하는 것
10. Arrow function
const simplePrint = function () {
console.log('simplePrint!');
};
const simplePrint = () => console.log('simplePrint!');
const add = function (a, b) {
return a+ b;
};
const add = (a, b) => a + b;
const simpleMultiply = (a, b) => {
// do something more
return a * b;
};
- 항상 anonymous function이다.
11. IIFE (Immediately Invoked Function Expression)
(function hello() {
console.log('IIFE');
})();
- 함수를 선언함과 동시에 호출
참고
youtube 드림코딩 by 엘리
https://www.youtube.com/watch?v=e_lU39U-5bQ&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=5