[LG CNS AM CAMP 1기] 호이스팅Hoisting, 다양한 함수 선언 방법

2024. 12. 26. 20:24·LG CNS AM CAMP 1기
🔑Writing Key Point in Posting

💡 호이스팅 Hoisting


📃 진짜 많이 언급되는 것 같습니다. Hoisting은 자바스크립트에서 변수 선언과 함수 선언이 해당 코드 최상단으로 끌어올려지는 현상을 의미합니다

💻CODE

console.log(add(2, 4)); // 6

function add(a, b) {
  return a + b;
}

⬆️ 뭔가 이상한 점이 보이시나요? add(2, 4)를 함수가 선언되기 이전에 사용을 했는데, 콘솔값이 출력이 됩니다. 이러한 현상을 "호이스팅"이라고 합니다. 

💻CODE

console.log(func());

let func = function hello() {
  console.log("hello")
}

⬆️ 이러한 경우는 실행이 될까요? 

⬆️ 정답은 No 입니다. 왜 그럴까요? 호이스팅되어서 가장 상단으로 올라가야하는게 아닌가 생각할 수 있습니다. 다음과 같은 코드는 아래와 같이 진행됩니다

💻CODE

// 호이스팅된 코드 구조
let func;  // 변수 선언은 호이스팅됨

console.log(typeof func);  // undefined (함수의 값은 할당되기 전이므로 undefined)

func = function hello() {  // 함수 표현식이 변수에 할당됨
  console.log("hello");
}

console.log(func());  // "hello" 출력

⬆️ let func이라는 변수 선언은 값이 할당되지 않고, 호이스팅 되어서 상단으로 올라갑니다. 그래서 선언되지 않은 어떤 값을 함수로 호출할 수 없기때문에 에러가 발생하고, 그 이후에 할당이 되게됩니다.

💡 다양한 함수 선언 방법 및 종류


1️⃣ 콜백 함수(Callback Function) React에서 진짜진짜 많이 언급되는 함수로, 개발자가 코드를 통해서 명시적으로 선언하는 것이 아닌, 잠깐‼️여기서 명시적으로 선언한다는 의미는 함수의 동작,타입,결과가 명확하게 드러나는 것을 의미합니다

💻CODE

function add(a,b) {
  return a + b 
}

⬆️ 이 함수는 명시적으로 선언되었나요?

아니죠 우리는 타입,결과를 알 수 없습니다. add()함수는 숫자가 입력될수도 문자열이 입력될 수도 있습니다. 그럼 반환값도 당연히 예측할 수 없겠죠. 이러한 함수는 "암시적으로 선언"되었다고 합니다

💻CODE

function add(a:number,b:number) {
  return a + b 
}

⬆️ 위에 타입스크립트를 통해 타입을 명시해주어야 명시적 함수라고 할 수 있습니다.

📃 그럼 다시 콜백함수로 돌아와서, 콜백함수는 "함수로 전달되는 함수"입니다. 

💻CODE

function calc(callback, a, b) {
  console.log(callback(a, b))
}

const add = function (a, b) {
  return a + b;
}

const sub = function (a, b) {
  return a - b;
}

calc(sub, 2, 4)

⬆️ 위에 코드를 보면 왜 콜백함수가 필요한지 이해가 가시나요? callback 함수는 어떤 함수에 인수로서 전달되어 필요한 시점에 호출됩니다. 계산기라는 calc()가 있다고 할때, 우리는 따로 구현해놓은 add, sub를 전달해줌으로서 유연하게 a,b값을 처리할 수 있습니다. 그럼 위에 코드에서는 뭐가 콜백함수죠? add, sub를 Callback 함수라고 합니다!

2️⃣ 이벤트 함수(Event Function) 역시 정말 많이 사용되는 함수로서 특정 이벤트에 호출되는 함수를 의미합니다. 여기서 언급하는 특정 이벤트란 사용자의 Click이 있을 수 있겠죠. 

💻CODE

<button id="myButton">Click Me</button>
<script>
    // 이벤트 함수 정의
    function handleClick() {
      alert("Button clicked!");
    }

    // 버튼 요소에 이벤트 핸들러 등록
    const button = document.getElementById("myButton");
    button.addEventListener("click", handleClick);
</script>

3️⃣즉시 실행 함수(Immediate Invoked Function) 이 함수는 정의함과 동시에 실행되는 함수로서 아래의 코드와 같습니다. 저는 프로젝트를 진행하면서 사용해보지는 못한 것 같네요

💻CODE

((param) => {함수 내용})(param)

// 예시
((what) => { console.log(`${what} 함수입니다`) })("즉시 실행")

4️⃣ 화살표 함수(Arrow Function) 진짜 별표 10만개죠. 진짜 많이 사용되는 함수로서 그만큼 코드를 혁신적으로 단축시켜줍니다. 

💻CODE

// 1단계: 기명 함수 표현식 (Named Function Expression)
const add = function func(a, b) {
  return a + b;
};

// 2단계: 익명 함수 표현식 (Anonymous Function Expression)
const add = function(a, b) {
  return a + b;
};

// 3단계: 화살표 함수 (Arrow Function - 기본 형태)
const add = (a, b) => {
  return a + b;
};

// 4단계: 화살표 함수 (Arrow Function - 간결한 형태)
const add = (a, b) => a + b;

⬆️자바를 사용하던 저는 이 문법이 정말 혁신적이라고 생각했습니다. 물론 자바에도 화살표 함수가 존재하지만, 자바는 정적 언어이고 자바스크립트는 동적 언어이기 때문에 자바스크립트에서 화살표 함수가 제공하는 유연함이 더 돋보이는 것 같습니다.

📝 SUMMARY


📌 자, 여기서 가장 중요한 점은 화살표 함수는 호이스팅이 적용되지 않는다는 점입니다. 호이스팅에 대해 살펴보았듯이, 선언된 변수는 끌어올려지고 그 후에 함수 표현식이 할당되기 때문에, 이 점을 고려하여 프로젝트에서 적절한 시점에 사용해야 할 것 같습니다

저작자표시 비영리 변경금지 (새창열림)
'LG CNS AM CAMP 1기' 카테고리의 다른 글
  • [LG CNS AM CAMP 1기]- [React] JSX Deep Dive 쉽게 이해하기
  • [LG CNS AM CAMP 1기] 단축 속성명, 계산된 속성명, 전개 연산자, 배열 & 객체 비구조화 개념 정리
  • [LG CNS AM CAMP 1기] - React, Component, SPA 개념 정리
  • AI 서비스 이해 및 기술 필요한가요? 개발자 관점 Trend 및 향후 동향
Jelong
Jelong
커스텀 웹: https://jaehong-park.com Github: https://github.com/qkrwoghd04
  • Jelong
    24/7 Developer's Note
    Jelong
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Software Engineering
      • Ubuntu
      • Network
      • JavaScript
      • Web
      • Interaction Design
      • React Native
      • React
      • Algorithm
      • Java
      • Database design
      • IT Trend
      • TroubleShooting
      • AWS
      • Interview
      • LG CNS AM CAMP 1기
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    블랙 박스 테스트
    데이터 구조
    알고리즘
    prototyping
    html
    AWS
    generic
    Queues
    자바
    typescript
    JS
    미니넷
    React
    이진트리
    frontend
    오블완
    알고리즘 분석
    ChatGPT
    화이트 박스 테스트
    css
    javascript
    BST
    티스토리챌린지
    mininet
    heap
    소프트웨어 공학
    GPT-4
    expo
    자바스크립트
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jelong
[LG CNS AM CAMP 1기] 호이스팅Hoisting, 다양한 함수 선언 방법
상단으로

티스토리툴바