스코프 (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를 사용하는 사람이 아직은 많지 않기 때문에)

 

 

+ Recent posts