[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기
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바