함수란?
반복적으로 필요한 코드를 하나의 덩어리로 묶어서 필요할 때마다 꺼내 쓸 수 있도록 한 것.
- 재사용성이 높고,
- 유지보수가 용이하며,
- 구조 파악이 용이하다는 장점을 가진다.
📌 함수 구조
용어 | 이름 | 의미 |
Parameter | 매개변수 | 함수 안에서 사용하는 데이터를 전달 받는 것 (호출하는 쪽에서) |
Arguments | 인수,인자, 전달인자 | 매개변수가 받아 줄 특정한 데이터 (전달하는 것) |
* 기본 매개변수: 값이 전달되지 않거나 undefined인 경우 명명된 매개변수를 기본값으로 초기화할 수 있다.
function add(a =0, b = 0) { // 값을 입력하지 않으면 내가 정해둔 0으로 입력하기 위해.
return a + b
};
add()
📌 함수 선언
함수선언방식 | 호이스팅 여부 | 함수표현 전 함수호출 여부 |
함수선언식 | 호이스팅 ⭕ | 함수선언 전에 함수호출 ⭕ |
함수표현식 | 호이스팅 ❌ | 함수표현 전에 함수호출 ❌ |
1. 함수 선언식
- function + 이름 + () + {} 의 조합인 구문(statement)으로 선언하는 것. (기명함수)
- 호이스팅* 가능. 선언 전에도 호출 가능.
* 호이스팅이란? 선언부가 유효범위(스코프{ }) 안의 최상단으로 끌어올려지는 것.
add(1, 2) // 3 반환. 선언 전에도 호출 가능
// 호출이 먼저 되어있고 그 뒤에 함수가 있어도 혼동하지 말 것.
// 함수 선언식 (기명함수)
function add (a, b) {
return a + b;
}
2. 함수 표현식
- 이름없이 선언하고 값으로 할당하는 표현식(expression). (익명함수)
- 호이스팅 불가능. 함수호출을 함수표현보다 먼저 할 수 없다.
add(1, 2) // ❗️Uncaught ReferenceError: printHi is not defined.
// 함수 표현식 (익명함수)
let add = function () {
return a + b;
}
3. 화살표 함수
- function을 화살표 기호로 대체하여 표현. (함수이름을 정할 수 없기 때문에 표현식으로 사용)
function add(a, b) {
return a + b
}
// 이 함수를 화살표 함수로 작성하면,
let add = (a, b) => {
return a + b;
}
// 혹은
let add = (a, b) => a + b; // (중괄호없이 쓰는 화살표 함수)
// 만약 전달하는 인자가 한 개라면(a) 소괄호도 생략가능
let add = a => a + 10;
// 축약형으로 객체데이터를 사용하려면 소괄호로 한 번 감싸줘야 함
let add = b => ({ name: 'kim' })
화살표 함수 참고 : https://ko.javascript.info/arrow-functions-basics
https://ko.javascript.info/arrow-functions
📌 즉시 실행 함수 (IIFE)
- 정의되자마자 즉시 실행되는 함수. (Immediately-Invoked Function Expression)
- 초기화 작업 해줄 때 주로 사용.
//즉시실행함수. 익명으로 함수를 만들고 두 개의 소괄호 안에 넣어줌. (함수)()
(function () {
console.log(a * 2)
})();
//뒤쪽의 소괄호를 즉시 실행 함수를 묶어둔 소괄호 내부 뒤쪽에 넣어서 작성도 가능. (함수())
(function () {
console.log(a * 2)
}());
(function () {
// …
})();
(() => {
// …
})();
(async () => {
// …
})();
즉시실행함수 참고: https://developer.mozilla.org/ko/docs/Glossary/IIFE
📌 타이머 함수
일정 시간이 지난 후에 원하는 함수를 예약 실행(호출)할 수 있게 한다.
- setTimeout(함수, 시간): 일정 시간 후 함수 실행 (지연실행). 뒤의 시간이 최소지연시간을 의미한다.
- setInterval(함수, 시간): 시간 간격마다 함수 실행
- clearTimeout(): 설정된 Timeout 함수를 종료
- clearInterval(): 설정된 Interval 함수를 종료
📌 콜백 함수
함수의 인수로 사용되는 함수
function timeout() {
setTimeout(() => {
console.log('Hello!')
}, 3000)
}
timeout()
console.log('Done!')
console.log('Done!')을 timeout 함수 뒤에 작성해도 timeout 함수가 3초 뒤에 실행하게 되어 있기 때문에
console에 Done!이 먼저 출력, 3초 뒤 Hello! 가 출력된다.
Hello! 뒤에 Done!이 출력되도록 하려면? ➜ callback 함수를 사용한다!
// callback
function timeout(callback) { // 2.
setTimeout(() => {
console.log('Hello!');
callback() // 3.
}, 3000)
}
timeout(() => { // 1.
console.log('Done!')
})
1. timeout 이라는 함수의 인수로 화살표함수를 사용한다. 여기서 화살표 함수가 callback 함수.
2. timeout 함수 내에서 1번의 인수를 받아 줄 매개변수가 필요하다. 임의로 callback 이라 만들어 줌.
3. 2번에서 매개변수를 만들었으면, 실행을 보장하고 싶은 곳에서 함수호출 하듯이 매개변수이름() 형태로 작성한다.
➜ 특정한 실행 위치를 보장해주는 방법으로 callback 함수를 활용할 수 있다.
'TIL archiving ···.ᐟ > JavaScript + TypeScript' 카테고리의 다른 글
[노트내용정리] 조건문과 반복문 (0) | 2024.08.28 |
---|---|
[노트내용정리] 연산자 (Operator) (0) | 2024.08.28 |
[노트내용정리] 변수의 타입 - 객체타입 (0) | 2024.08.28 |
[노트내용정리] 변수의 타입 - 원시타입 (0) | 2024.08.27 |
[노트내용정리] 변수 (0) | 2024.08.27 |