1. 함수(Function)
1️⃣ 함수란?
1) 개념
특정 작업을 수행하는 코드 묶음필요할 때 호출하여 반복 사용 가능
2) 기본 형태
function add(a, b) {
return a + b;
}a,b→ 매개변수(parameter)
return→ 결과 반환
- 호출:
add(1,2)
2️⃣ 함수 정의 방식 (여러 스타일 지원)
1) 함수 선언식
function greet() {
console.log("hello");
}- 호이스팅 적용됨 (선언 전에 호출 가능)
2) 함수 표현식
const greet = function() {
console.log("hi");
}- 변수에 함수를 저장
- 호이스팅 안 됨 (변수 선언 후 사용 가능)
3) 화살표 함수(Arrow Function)
const add = (a, b) => a + b;- 코드를 더 간결하게 작성
this바인딩 방식이 다름
4) 익명 함수 (이름 없는 함수)
setTimeout(function() {
console.log("delay");
}, 1000);5) 즉시 실행 함수 (IIFE)
(function() {
console.log("run once");
})();3️⃣ 함수의 핵심 개념
1) 매개변수(Parameter) & 인수(Argument)
- 함수 선언부 괄호 안에 있는 것 → 매개변수
- 실제로 전달하는 값 → 인수
2) return
- 값을 반환하지 않으면
undefined반환
3) 스코프(scope)
- 함수 내부에서 선언한 변수는 밖에서 접근 불가
function test(){
let x = 10;
}
console.log(x); // error4️⃣ 자바스크립트 함수 = 1급 객체
1) “함수는 1급 객체(First-class Object)”란?
자바스크립트에서는 함수를 값으로 취급한다는 의미
즉, 함수가 일반 변수처럼 사용 가능!
2) 1급 객체 조건
함수는 다음이 모두 가능
① 변수에 저장할 수 있다
const hello = function(){};② 다른 함수의 인자로 전달할 수 있다
setTimeout(hello, 1000);③ 함수가 함수를 반환할 수 있다
function outer() {
return function inner() {};
}④ 데이터 구조에 저장 가능
const arr = [hello];
const obj = { fn: hello };➡ 즉, 함수를 숫자/문자처럼 다룰 수 있다는 뜻!
5️⃣ 함수가 1급 객체라서 가능한 기능
1) 고차 함수(Higher-order function)
함수를 인수로 받거나 반환하는 함수
function repeat(fn) {
fn();
}
repeat(() => console.log("call"));2) 콜백(callback)
setTimeout(() => console.log("done"), 500);3) 함수형 프로그래밍 스타일
[1,2,3].map(x => x * 2);4) 클로저(Closure)
함수 안 함수가 외부 값을 기억하는 것
6️⃣ 핵심 요약
개념 | 한 줄 설명 |
함수(Function) | 재사용 가능한 코드 묶음 |
함수 선언/표현식 | 정의하는 여러 방법 존재 |
return | 값을 호출한 곳으로 돌려줌 |
스코프 | 함수 내부 변수는 외부에서 접근 X |
1급 객체 | 함수가 일반 값처럼 다뤄질 수 있는 객체 |
➡️ 따라서
JS 함수는 변수에 담기고, 전달되고, 리턴될 수 있는 1급 시민
7️⃣ 실습
1) 함수 기본
// 함수 (상태 x)
// f(x) = x+1
function f(x) {
return x+1;
}
let num = f(5);
console.log(num);
➡️ 이건 es5 문법!
2) 연산 함수
function f(x, y) {
return x+y;
}
let num = f(5, 10);
console.log(num);
3) 연산 함수 (5 + “십”)
function f(x, y) {
return x+y;
}
let num = f(5, "십");
console.log(num);
4) 연산 함수 (5 + “10”)
function f(x, y) {
return x+y;
}
let num = f(5, "10");
console.log(num);
➡️ 타입이 고정되어 있지 않기 때문에 불안함
Share article