오늘은 javascript의 변수인 let, var 상수인 const 를 알아보자.
- let
let은 ES6에 추가된 '변수' 로 값을 저장한 값을 수정할수있다.
block 안에서 선언한 변수는 block scope를 가져 해당 scope에서만 사용할수 있다.
이처럼 첫번째 block 밖에서 선언한 변수 gname은 block밖에서도 사용하지만,
block안에서 선언한 변수 name은 그 밖에서 사용하지 못해 출력이 되지 않았다.
근데 이게 ES6 부터 나온거면, 그전에는 변수를 무엇으로 썼을까?
- var
var는 ES6 이전 쓰던 '변수'이다. ES6이후로는 변수 선언시 거의 무적권 let을 사용하는데,
var가 안쓰이게 된데에는 크게 2가지 이유가 있다.
1. var hoisting
대부분 프로그래밍 언어의 변수들은
선언후 값을 할당 하기전에는 절대 쓸수 없고
선언하지 않으면 절대 값을 할당할수 없는데
미친 var는 선언하기도 전에 할당할수 있고 심지어 사용할수 있기까지 하다.
사진을 보면, var로 선언되는 age는 값이 선언되기도 전에 에러가 나지않고
심지어 할당되기도 전에 출력문에서도 에러가 나는 반면,
let으로 선언되는 age는 출력은 물론 선언도 안된다 (이게 정상이다.)
- var hoisting?
이런 현상은 var hoisting 때문이다. 직역하면 var 끌어 올리기 라고도 하는데 어디에 선언하던지간에 상관없이,
변수 선언을 맨 위로 끌어 올려주는것을 의미한다
hoisting : 변수를 어디에 선언하던지간 좌우지간 상하지간에 변수 선언이 file 맨위로 끌어 올려지는것
2. no block scope
var는 block 스코프가 없다. 이말인 즉슨 어디에 선언하던 전역변수처럼 아무곳에서나 사용할수 있다는 이야기이다.
바로 사용해보자
분명 x는 첫번째 block에서 선언되었는데, conole창에 야무지게 띄운것을 확인할수 있다.
이처럼 너무 너무 유연한 쓰임은, 잘못쓸경우 컴퓨팅 자원에 매우 큰낭비가 될수있어 현재는 let 만 쓰고 있다고 한다.
let 쓰지마라.
- const ( constant )
const 는 할당한후에 값이 절대 바뀌지 않는 immutable한 특성을 가진 것이다.
내 주변 개발자들도 그렇고 보통 변수를 선언할때 웬만하면 const로 선언하라고 많이들 이야기하는데,
간단하게 3가지 정도의 이유가 있다.
1. 보안에 좋다
- 코드를 악의적으로 수정해 할당된 값을 이상하게 변경하는 공격이 존재하는데, 그에 대해 안전하다
2. thread safety
- app이 실행되면 하나의 프로세스가 할당디고 다양한 thread가 생긴다고 (이론적으로) 배웠을것이다.
이때 다양한 thread들이 동시에 변수에 접근에 값을 변경할수 있는데, 이를 방지할수 있다.
3. reduce human mistakes
- 여타 다른 언어의 const 타입처럼 실수로 코드를 잘못 작성해 바꾸면 안되는 값을 바꿔버리는 일을 막을수 있다.
이처럼 java script 에는 let , const , var 총 3가지가 있으며
mutable 한 변수를 사용할때는 let 을 사용하면 되고
immutable 한 변수를 사용할때는 const 를 사용하면 된다.
var 은 쓰지마라.
'javascript' 카테고리의 다른 글
[javascrip 기본] javascript의 object 사용법 (0) | 2023.08.31 |
---|---|
[javascrip 기본] javascript의 class, 생성자 , method (0) | 2023.08.23 |
[javascript 기본] javascript 함수의 선언과 표현 (1) | 2023.08.20 |
[javascript 기본] javascript의 연산자 / Dynamic typing (0) | 2023.08.16 |
[javascript 기본] 2. 다양한 data type과 number, string, Symbol, undefined, null (0) | 2023.08.16 |