다른 게시글에도 정리했지만 한번 더...
Scope
변수에 영향력을 행사하는 범위이다. 지역변수, 전역변수를 예로 들수 있다.
전역 스코프(Global Scope)는 전역에 선언되어있어 어느 곳에서든지 해당 변수에 접근할 수 있다.
지역 스코프(Local Scope)는 해당 지역에서만 접근할 수 있다.
Hoisting
호이스팅이란 모든 선언문이 해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성을 말한다.
문단 아랫단에 변수를 선언을 하여도 문단 가장위에 선언된것으로 간주, 선언했던 구간에서는 값을 할당한 것으로 읽는다.
호이스팅의 예시
console.log(a);
var a = 2;
console.log(a);
선언하지 않은 것을 호출하면 에러가 나면서 프로그램이 동작하지 못하는데, 첫 console.log(a)가 호출 할 때 a를 선언하지 않았는데 프로그램이 동작을 한다.
호이스팅이 이뤄졌기 때문인데 프로그램은 아래와 같은 순서로 프로그램을 읽었기 때문이다.
var a; // 호이스팅에 의해 스코프 맨 윗단으로 선언문이 옮겨짐
console.log(a);
a = 2; // 원래 선언문 위치는 할당의 역할을 함
console.log(a);
함수선언 방식에 따른 호이스팅
함수 선언문 // 함수로 선언
function func1() {
}
함수 표현식 // func2라는 변수에 함수를 할당
var func2 = function() {
}
호이스팅이 된 경우
function func1() { // 함수선언문은 안의 내용 전체를 호이스팅
}
var func2; // 함수표현식은 변수 선언만 호이스팅
// function func1() {
//
// }
var func2 = function() {
}
'Language > javascript' 카테고리의 다른 글
[JavaScript] this, call, apply, bind (1) | 2023.10.17 |
---|---|
[JavaScript] 실행 컨텍스트 Execution Context (1) | 2023.10.16 |
[JavaScript] 얕은 복사(shallow copy)와 깊은 복사(deep copy) (0) | 2023.10.16 |
[JavaScript] 데이터 타입 기본형과 참조형 (0) | 2023.10.15 |
[JavaScript] Class / get, set, 상속 (1) | 2023.10.15 |