본문 바로가기

자바스크립트

함수 선언식과 표현식의 차이(+호이스팅의 개념)

[함수 선언식과 함수 표현식의 차이]

→ 함수의 생성시점의 차이가 있음 / 호이스팅이 발생하는 주체가 다름

-----------------------------------------------------------------------------------------------------------------

→ 함수선언문으로 함수를 정의하면 런타임 이전에 코드 평가 과정에서 함수객체가 먼저 생성된다. 즉, 함수 호이스팅이 발생한다는 것이다.

→ 함수선언문 이전에 함수를 참조할 수 있으며 실행까지 할 수 있다. (이렇게 함수 선언문이 코드의 선두로 끌어 올려진 것 처럼 동작하는 방식을 함수 호이스팅 이라 한다.)

→ 함수 선언문으로 선언된 함수는 함수 호이스팅이 발생한다. 런타임 이전에 함수 객체가 생성이 되므로 함수가 정의되기 전에 함수를 호출할 수 있다.

-----------------------------------------------------------------------------------------------------------------

→ 함수표현식으로 함수를 정의하면 변수 호이스팅이 발생한다.

→ 변수에 할당되는 값은 런타임에 결정되기 때문에, 함수를 할당받는 변수는 변수 호이스팅에 의해 undefined로 초기화된다. 따라서, 변수에 함수가 대입되기 전에는 undefined이기 때문에 함수에 접근할 수 없다.

→ 함수 표현식으로 선언된 함수는 변수 호이스팅이 발생하며, undefined로 초기화된다. 그러므로 함수 선언문으로 선언한 함수는 함수가 정의되기 전에 함수를 호출할 수 없다.

-----------------------------------------------------------------------------------------------------------------

결론 : 함수 호이스팅은 함수를 사용하기 전에 반드시 함수를 선언해야한다는 규칙을 무시하므로 함수 표현식을 권장

-----------------------------------------------------------------------------------------------------------------

변수에 함수자체를 할당하게 되면 함수자체가 변수에 할당된다

ex) let word = 함수명;  → 함수를 호출하지 않고 함수명을 할당하면 함수자체가 할당된다.


호이스팅(Hoisting)의 개념

함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것을 말한다.

 

호이스팅이란

자바스크립트 함수는 실행되기 전에 함수 안에 필요한 변수값들을 모두 모아서 유효 범위의 최상단에 선언한다.

자바스크립트 Parser가 함수 실행 전 해당 함수를 한 번 훑는다.

함수 안에 존재하는 변수/함수선언에 대한 정보를 기억하고 있다가 실행시킨다.

유효 범위: 함수 블록 {} 안에서 유효

즉, 함수 내에서 아래쪽에 존재하는 내용 중 필요한 값들을 끌어올리는 것이다.

실제로 코드가 끌어올려지는 건 아니며, 자바스크립트 Parser 내부적으로 끌어올려서 처리하는 것이다.

실제 메모리에서는 변화가 없다.

-----------------------------------------------------------------------------------------------------------------

함수호출은 ()을 이용하여 호출해야 한다.

-----------------------------------------------------------------------------------------------------------------

조건문을 작성시 교집합이 되는 조건을 가장 최상단에 작성

그이후 각각 조건 작성

가장 아래에 모든 조건을 만족하지 않는 조건 작성

 

'자바스크립트' 카테고리의 다른 글

Math 메서드  (0) 2021.05.07
자주 사용되는 String 메서드  (0) 2021.05.07
조건문  (0) 2021.04.07
함수  (0) 2021.04.07
타입  (0) 2021.04.06