스코프 (scope)
: 제한된 영역. {} 로 영역을 표시한다
1. 전역과 지역
- 전역변수 global과 지역변수 local
- local host(내 PC)와 remote(서버)
1) 전역변수 global : 전체 영역에서 사용될 수 있는 변수
2) 지역변수 local : 제한된 영역에서 사용될 수 있는 변수.
(number함수 내에서 사용되는 num1이 지역변수이다 )
3) 전역변수와 지역변수
* 같은 이름의 변수이지만 함수 number 지역에서는 다른 변수를 가진다.
2. 호이스팅 (Hoisting)
: 스코프에서 생성된 변수. ( 전역도 해당하긴 한다) 에서 일어남.
끌어올리다. 라는 뜻으로 변수를 스코프 내에서 선언하면 스코프의 가장 상단에서 변수의 존재를 인식한다.
하지만 변수의 값은 선언되는 라인에서 들어옴.
ex 1 ) var
: 호이스팅이 없다면 전역변수인 num1 = 10이 console.log에 의해 찍히겠지만
같은 스코프 아랫줄에서 num1=30으로 변수를 선언 했기 때문에 스코프의 가장 상단에서 존재를 인식한다.
따라서 undefined 가 찍힘.
->. 변수를 맨 위에서 선언했을 때
: 지역변수 num1=30이 잘 찍힌다.
ex 2) let (es6 개선사항)
위의 var에서 undefined가 찍힌 것을 개선하기 위해 let을 사용하면,
호이스팅으로 인해 num1의 선언은 상단에서 인식 되나 undefined 대신에 오류가 뜬다.
- 상단에 let으로 변수 선언하기.
아주 잘됨 !
* 따라서 변수를 선언할 때는 맨 위에 쓰는게 좋다 ! *
ex 3 ) 전역에서의 호이스팅
- var
: 지역에서와 마찬가지로 undefined
-let
: 지역에서와 마찬가지로 오류,
3. 스코프에서 let과 var의 차이점
: let이 스코프에 대해서 더 엄격하다.
- var로 for문의 i를 선언했을 때.
: 전역의 변수에도 영향을 준다
for문 소괄호에서 var로 변수를 호출하는 것은 전역으로 사용된다.
- let으로 for문의 i를 선언했을 때
: 전역의 i 에게 영향을 주지 못한다
for문의 소괄호 안에서 let으로 변수를 선언하는 것은 지역으로 사용된다.
+)
- const로 for문 소괄호 안의 변수를 선언했을 때
: const는 바뀔 수 없는 변수이므로 for문의 실행 자체가 오류가 난다.
*
- 가급적으로 let과 const를 사용하는 것이 낫다.
- 서비스 목적이라면 var를 사용하는 게 낫다( let과 const를 사용하는 사람이 아직은 많지 않기 때문에)
'프론트엔드 > JavaScript' 카테고리의 다른 글
<JS> 클래스(class) (0) | 2017.09.01 |
---|---|
<JS> 스코프체인(scope chain) 과 클로저(closure) (0) | 2017.09.01 |
<JS es6> let, const, 변수명 만으로 선언하기 (0) | 2017.08.25 |
<JS> JS로 애니메이션 만들기 (setInterval,setTimeout) (0) | 2017.08.11 |
<JS> 유저의 행위(event) (4) input form (0) | 2017.08.11 |