일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- lexical scope
- 리액트 라우터
- 호이스팅
- webstorm
- Execution Context
- 실행컨텍스트
- 자바스크립트
- Arrow function
- function 표현식
- moment.js
- variable object
- JavaScript
- react-router
- 함수
- hoisting
- 화살표 함수
- BIND
- function 문
- lexical environment
- react router
- activation object
- This
- happy hacking
- type
- scope chain
- 함수 표현식
- vs code
- 정적스코프
- function
- 객체
- Today
- Total
Pandaman Blog
[JS] Javascript의 함수 호이스팅 (Hoisting) 본문
Javascript 함수 호이스팅(Hoisting)
호이스팅(Hosting)은 코드 구문이 실행하기 전에 변수 및 함수 선언이 해당 범위의 맨 위로 이동하는 Javascript 메커니즘입니다.
위 설명을 정확하게 이해하기 위해 예제를 만들어 테스트를 해봤습니다.
introduce('oyg0420'); // my name is oyg0420
function introduce(name) {
console.log(`my name is ${name}`);
}
함수가 선언이 되기 전에 호출을 했는데, 결과는 에러 없이 정상적으로 작동합니다. 그렇다면 위와 같은 구문이 작동되는 이유에 대해 알아보겠습니다. 자바스크립트에서는 스코프 전체를 살펴보고 함수 선언을 맨 위로 끌어올리기 때문입니다.
그렇다면 어떤 방식으로 함수를 선언해야 호이스팅이 되는 걸까요?
sayHello('oyg0420');
const sayHello = function(name) {
console.log(`hi, ${name}`);
}
위 예제는 함수 표현식으로 작성된 함수인데요, 함수가 선언되기 전에 호출을 해봤습니다. 결과는?VM737:1 Uncaught ReferenceError: Cannot access 'sayHello' before initialization at <anonymous>:1:1
접근할 수 없다는 에러가 발생합니다.
결국 함수 호이스팅은 함수 선언식으로 작성된 경우에만 적용된다는 것을 알 수 있었습니다.
그렇다면, 함수내에서의 호이스팅은 어떻게 적용되는 것일까?
sum(2, 4); // VM853:1 Uncaught TypeError: sum is not a function
function f1() {
sum(2, 4);
function sum(a, b) {
console.log(a + b);
}
}
f1(); // 6
함수선언이 이루어진 함수 외부에서의 함수 호출로 에러가 발생했습니다. 함수선언과 같은 범위에 있는 함수 호출은 올바른 값이 반환되었습니다.
위 예제들로 전역 범위, 함수 범위에 따라서 다르게 동작한다는 것을 알 수 있었습니다.
전역 범위는 최상단에 끌려 올라가고, 함수 범위에서는 해당 함수의 최상단에 올려진다는 것을 알 수 있었습니다.
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'Front end > Javascript' 카테고리의 다른 글
[JS] Javascript의 this란? (0) | 2020.01.19 |
---|---|
[JS] Javascript의 즉시 실행 함수 (IIFE) (6) | 2020.01.19 |
[JS] Javascript의 Arguments 객체 (0) | 2020.01.14 |
[JS] Javascript의 Function (함수) (0) | 2020.01.11 |
[JS] Javascript의 Date객체 (0) | 2020.01.07 |