자바스크립트/자바스크립트란?

함수 선언문과 함수 표현식 그리고 호이스팅

위르겐 2022. 7. 20. 10:18

JS에서 함수를 선언하는 방법은 두 가지가 있다. 

 

 

 

function step_1 () {}

위와 같이 선언하는 방법은 함수선언문이고

 

 

 

let step_1 = function () {}

 

위의 함수 선언은 함수표현식이다.

 

 

두 함수 전부

기능은 동일하다.

 

다만 호이스팅의 영향을 받는지 안받는지의 차이가 있다.

 

 

 

함수 표현식먼저 살펴보자

 

바로 전 글에서

var와 let의 호이스팅에 대해 알아보았는데

이번 함수표현식에서도 같은 원리가 적용된다.

 

var step_1 = function () {
  console.log('위르겐')
}

step_1()

 

let step_2 = function () {
  console.log('위르겐')
}

step_2()

 

 

위 두 함수는 각각 var와 let으로 함수를 작성했으나

문제 없이 작동된다.

 

 

하지만 함수호출을 위에서 한다면?

 

step_1()

var step_1 = function () {
  console.log('위르겐')
}

 

step_2()

let step_2 = function () {
  console.log('위르겐')
}

 

 

 

var로 선언한 함수가 있는데

 그 전에 호출을 해버리면

var 선언부분만 호이스팅이 되어 위로 올려지기 때문에

변수에 아무것도 담겨져있지 않은 모양새가 된다.

 

그러면 function이 아니라고 뜨는 것!

 

 

그렇다면

그 밑에 let으로 표현한 함수식은?

 

 

애초에 let은 끌어올려지지 않으니

정의되어있지도 않다는 것이다.

 

 

 

다음은

 

함수선언문으로 작성된 함수를

선언되기 전이나 후에 호출해보자

 

step_3()

function step_3 () {
  console.log('위르겐')
}

 

 

함수 선언문은

호출을 위에서하든 아래에서하든

정상적으로 불러와진다.

 

이런 두가지 함수선언방식으로 인해

누구는 표현식이 권장된다하고

누구는 선언문이 권장된다고 하는데

 

 

개인프로젝트에선 이 문제는 취향으로 갈리겠지만

대규모 프로젝트에서는

기존에 선언되어있는 방식으로 우리가 맞춰야한다.

반응형