[JavaScript 기본] 함수 정리

2025. 10. 29. 21:00·React/JavaScript 기본

함수는 반복 로직을 재사용하고, 코드를 역할 단위로 묶는 기본 단위임

예시로 흐름을 먼저 보겠음

// 함수 선언문 (Function Declaration)
function greeting() {
  console.log("안녕하세요");
}

console.log("호출 전");
greeting(); // 함수 호출
console.log("호출 후");

function getArea(width, height) {
  // 중첩 함수 (Nested Function)
  function another() {
    console.log("another");
  }

  another();

  // ( ) 안에 있는 것을 "매개변수(parameter)"라고 부름
  const area = width * height;

  return area; // return 이후 코드는 실행되지 않음 (함수 즉시 종료)
}

// getArea(20, 20)에서 ( ) 안에 넣는 값을 "인수(argument)"라고 부름

const area1 = getArea(30, 30);
console.log(area1); // 900

// 호출을 먼저 하고 함수를 "선언"해도 동작함 → 선언문은 호이스팅됨

1. 함수 선언 방식


1-1. 함수 선언문

function add(a, b) {
  return a + b;
}
  • 이름 필수
  • 호이스팅으로 선언 이전 호출 가능 (메모리에 전체 함수가 먼저 올라감)

1-2. 함수 표현식

const add = function (a, b) {
  return a + b;
};
  • 변수에 함수 값을 대입
  • 호이스팅 시 함수 본문은 올라가지 않음 (변수만 선언 단계로 올라감 -> 선언 이전 호출 불가)

1-3. 화살표 함수

const add = (a, b) => a + b;           // 표현식이 한 줄이면 return 생략 가능
const square = (n) => { return n * n }; // 블록 쓰면 return 필요
  • `this`, `arguments` 바인딩이 없음 (콜백에 유용)
  • 생성자(`new`)로 사용 불가

2. 호이스팅

형태 선언 이전 호출
함수 선언문 가능 (함수 본문까지 미리 메모리에 올라감)
함수 표현식 불가 (변수 선언만 호이스팅, 값 대입 전이라 호출 불가)
화살표 함수 불가 (표현식과 동일)
hello();             // 동작
function hello() { console.log('hi'); }

hi();                // TypeError (아래에서 대입되기 전)
const hi = function () { console.log('hi'); };

3. 매개변수(`parameter`) vs 인수(`argument`)

  • 매개변수 : 함수 정의 시 괄호 안 이름들
  • 인수 : 함수 호출 시 넘기는 실제 값
function getArea(width, height) { // ← 매개변수
  return width * height;
}

getArea(30, 30); // ← 인수

3-1. 기본값 `Defalut Parameter`

function greet(name = "Guest") {
  console.log(`안녕하세요, ${name}`);
}
greet();           // "안녕하세요, Guest"
greet("도서");     // "안녕하세요, 도서"

3-2. 구조 분해 매개변수(읽기 쉬움)

function createUser({ name, age }) {
  return `${name}(${age}) 생성`;
}
createUser({ name: "도서", age: 27 });

3-3. 가변 인수

function sum(...nums) {
  return nums.reduce((acc, cur) => acc + cur, 0);
}
sum(1, 2, 3, 4); // 10

4. 반환(`return`)과 조기 종료(`guard`)

  • `return`을 만나면 그 즉시 함수 종료
  • 이후 코드는 실행되지 않음(Dead code)
function buy(amount) {
  if (amount <= 0) return;  // 가드 패턴: 잘못된 입력 빠르게 차단
  console.log("결제 진행");
}
  • 아무 것도 반환하지 않으면 `undefined`반환
function logOnly() {
  console.log('print');
}
console.log(logOnly()); // undefined

5. 스코프와 중첩 함수

  • 함수는 블록 스코프를 가짐
  • 중첩 함수는 바깥 함수의 변수에 접근 가능(클로저의 기초)
function outer() {
  const secret = "token";
  function inner() {
    console.log(secret); // 접근 가능
  }
  inner();
}
outer();
  • 클로저 : 내부 함수가 바깥 환경(변수)을 기억하고 접근하는 특성
    -> 콜백/팩토리 함수에서 자주 쓰임

6. 값 전달 방식

  • JavaScript는 값에 의한 전달이다. (pass by value)
  • 다만, 객체 / 배열은 "참조(주소)"값이 복사 되므로, 함수 안에서 객체를 수정하면 원본이 바뀌는 것처럼 보임
function touch(obj) {
  obj.name = "수정됨";
}
const user = { name: "도서" };
touch(user);
console.log(user.name); // "수정됨"
  • 원본 보호가 필요하면 얕은 복사 후 사용
function safeTouch(user) {
  const copy = { ...user };
  copy.name = "수정됨";
  return copy;
}

7. 자주 쓰이는 패턴

 

7-1. 즉시 실행 함수 - 초기화 / 한 번만 실행

(function () {
  console.log("한 번만 실행");
})();

7-2. 순수 함수 - 테스트 쉬움

// 입력만으로 결과가 결정, 외부 상태 변경 X
const add = (a, b) => a + b;

7-3. 부수효과(사이드 이펙트)함수 - 최소화 권장

// 콘솔 출력, DOM 조작, 네트워크 호출 등
function notify(msg) {
  console.log(msg);
}

7-4. 안전 접근(옵셔널 체이닝) + 기본값

function getCity(user) {
  return user?.address?.city ?? "Unknown";
}

 

'React > JavaScript 기본' 카테고리의 다른 글

[JavaScript 기본] 콜백 함수  (0) 2025.11.01
[JavaScript 기본] 함수 표현식 & 화살표 함수  (0) 2025.10.31
[JavaScript 기본] 반복문  (0) 2025.10.29
[JavaScript 기본] 조건문 정리  (0) 2025.10.29
[JavaScript 기본] 연산자 정리  (0) 2025.10.29
'React/JavaScript 기본' 카테고리의 다른 글
  • [JavaScript 기본] 콜백 함수
  • [JavaScript 기본] 함수 표현식 & 화살표 함수
  • [JavaScript 기본] 반복문
  • [JavaScript 기본] 조건문 정리
이도서
이도서
  • 이도서
    도서의 코딩노트
    이도서
  • 전체
    오늘
    어제
    • 분류 전체보기 (249)
      • Today I Learned (79)
        • 2024 (78)
      • Swift (25)
        • Swift 문법 정리 (19)
        • RxSwift (5)
      • Swift Study (12)
        • Playground (2)
        • Storyboard (9)
        • UIKit (1)
      • Flutter (27)
        • Dart 언어 (16)
        • Flutter Study (11)
      • React (37)
        • HTML & CSS (8)
        • JavaScript 기본 (12)
        • JavaScript 심화 (14)
        • Node.js (2)
        • React (1)
      • Git (3)
      • 코딩테스트 (60)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 개발 공부 공유 링크
  • 인기 글

  • 태그

    Swift
    코딩테스트
    javascript
    ios앱개발자
    Til
    Flutter
    객체지향
    함수
    코딩테스트Level.1
    React
    DART
    코딩테스트 level.1
    html
    ios
    iOS앱개발
    javascript 기본
    CLASS
    storyboard
    내일배움캠프
    function
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이도서
[JavaScript 기본] 함수 정리
상단으로

티스토리툴바