Javascript 문법 - 함수

백엔드·2020년 11월 13일
0

Javascript 문법

목록 보기
6/16

호이스팅

사전적 의미 : 끌어올리다

  • Hoisting은 선언과 밀접한 관련이 있다.

  • javascript 엔진은 코드를 실행하기 전 단계로 코드 전반에 걸쳐서 선언된 내용들이 있는지를 쭉 훑어보고 발견하는 족족 위로 끌어올린다.

  • Hosting 성질을 모르면 위의 코드가 오류라고 생각이 들겠지만,
    javascript의 Hosting 성질로 변수 선언과 함수 선언을 위로 끌어올려 오류가 발생하지 않는다

  • 함수 선언문은 통째로 올라간 반면에, 함수 표현식은 선언만 올려짐

  • 함수 선언문은 그 자체로 하나의 선언문인 반면에, 함수 표현식은 선언과 할당이 한 문장안에 이루어지는 것으로 분리가 가능하다


함수선언문과 함수표현식

요즘에는 기명 함수표현식을 쓰는일이 거의 없다.

🤷‍함수선언문과 함수표현식의 차이

할당 여부 ✔
  1. 할당을 하지 않은 경우 => 전체가 호이스팅의 대상

  2. 할당을 한 경우 => 함수는 그 자리에 남아 있고 변수만 호이스팅 대상

📢 호이스팅이 중요한 이유

호이스팅의 여부에 따라 실무에서 엄청난 영향을 줌

🎞 위의 코드 예시 상황

  • 협업을 할 경우 소스코드의 길이가 5만줄 이상.

  • 호이스팅에 의해서 두개의 sum 함수 모두 맨위로 끌어올려짐.

  • 나중에 호이스팅 된 함수가 이전 함수를 덮어씌우게 됨.

  • 그 결과 아래의 sum 함수가 살아 남아 양쪽 sum(1,2), sum(3,4) 모두에서 값만 return하는 함수가 실행됨

📌 정리

  1. 함수 선언문은 모든 코드는 위에서부터 아래로 읽어내려가며 실행한다라고 하는 지극히 인간적인 상식에서
    벗어나 있어, 가독성면에서 매우 좋지 않다.

  2. 혼자서 개발할때는 어디서 선언하든지 실행이 가능하다는 편리한 점이 있겠지만,
    협업을 할 경우, 다른 개발자가 소스를 파악하고 이해하는데 상당한 저해가 될 수 있다.

  3. 맨위에서 부터 읽어가다가 쌩뚱맞게 처음보는 함수를 호출하는 경우(예를 들어 5000번째 줄에 함수를 구현한 경우)
    기타 등등의 여러가지 이유들로 인해서 함수 선언문 대신 함수 표현식을 쓸것을 권한다

    => 안전하고 예측가능한 소스가 된다

ref

profile
백엔드 개발자

0개의 댓글

관련 채용 정보