[함수] 함수 - var, let, const

2021. 1. 19. 13:42Front-end/Javascript

728x90
반응형

[ES6] 블록 변수

- ES6 버전부터는 전역 변수와 지역 변수 말고도 '블록 변수'가 추가되었음

- 블록 변수는 변수를 선언한 블록에서만 유효하고 블록을 벗어나면 사용할 수 없는 변수

- let, const 예약어를 사용해 변수를 선언하면 블록 변수가 된다.

- const는 값 재할당 불가능 (상수) / 값 재할당이 필요하면 let 사용

 

 

블록 레벨 스코프

대부분의 프로그래밍 언어는 블록 레벨 스코프(Block-level scope)를 따르지만 자바스크립트는 함수 레벨 스코프(Function-level scope)를 따른다.

 

함수 레벨 스코프(Function-level scope)

: 함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다.

 

블록 레벨 스코프(Block-level scope)

: 모든 코드 블록(함수, if 문, for 문, while 문, try/catch 문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.

 

 

var vs. let vs. const

변수 선언에는 기본적으로 const를 사용하고 let은 재할당이 필요한 경우에 한정해 사용하는 것이 좋다. 원시 값의 경우, 가급적 상수를 사용하는 편이 좋다. 그리고 객체를 재할당하는 경우는 생각보다 흔하지 않다. const 키워드를 사용하면 의도치 않은 재할당을 방지해 주기 때문에 보다 안전하다.

var와 let, 그리고 const는 다음처럼 사용하는 것을 추천한다.

  • ES6를 사용한다면 var 키워드는 사용하지 않는다.

  • 재할당이 필요한 경우에 한정해 let 키워드를 사용한다. 이때 변수의 스코프는 최대한 좁게 만든다.

  • 변경이 발생하지 않는(재할당이 필요 없는 상수) 원시 값과 객체에는 const 키워드를 사용한다. const 키워드는 재할당을 금지하므로 var, let 보다 안전하다.

변수를 선언하는 시점에는 재할당이 필요할지 잘 모르는 경우가 많다. 그리고 객체는 의외로 재할당을 하는 경우가 드물다. 따라서 변수를 선언할 때에는 일단 const 키워드를 사용하도록 하자. 반드시 재할당이 필요하다면(반드시 재할당이 필요한지 한번 생각해 볼 일이다.) 그때 const를 let 키워드로 변경해도 결코 늦지 않는다.

 

[출처] poiemaweb.com/es6-block-scope

 

let, const | PoiemaWeb

ES5까지 변수를 선언할 수 있는 유일한 방법은 var 키워드를 사용하는 것이었다. var 키워드로 선언된 변수는 아래와 같은 특징이 있다. 이는 다른 언어와는 다른 특징으로 주의를 기울이지 않으면

poiemaweb.com

 

 

결론: var는 함수레벨스코프를 사용하고 있어서 if문이나 그런 블록 에서는 전역변수처럼 사용되니까

더 직관적으로 사용이 쉬운 블록레벨스코프 방식인 let,const로 변수를 선언하고

default로는 주로 const를 사용하되 값의 재할당이 필요해지면 그 때 let을 사용하도록 한다

(★ 반복문에서 반복횟수를 나타내는 변수를 const를 썼더니 오류가 났다 -> 반복문은 재할당이 필요해서 let을 써야하는건가보다)

 

전역변수가 남용되는 것은 좋지 않다 - 간단한 프로그램이면 상관없으나 프로그램의 규모가 커지게 되면 복잡해짐

728x90
반응형