[JavaScript] 자바스크립트의 변수 선언
자바스크립트에서의 변수 선언은 어떻게 할까?
사실 처음에 자바 스크립트를 배우기 전 이름만 보고 "자바와 연관이 있지 않을까?" 자바에서 변수를 선언할때 변수형(정수, 실수, 문자열, 문자, 배열 등등)을 지정해주고 변수명을 지정해주고,,, 인줄 알았다!
그런데 자바스크립트는 자바와 아무런 연관이 없다. 진짜 어이가 없다. 그러면 이름은 왜 자바스크립트 인거지?
어쨌든! 이번에는 그러면 자바 스크립트에서는 변수를 어떻게 선언하는지 알아보자.
1. var
-자바스크립트에서 변수를 선언할때 변수명 앞에 var이라고 붙여주는것은 "variable"의 줄임말이고, 내가 말했듯 "변수" 라는 말은 가변적인 성질을 갖고 있다. 즉, 타입을 특정해주기 보단 var이라는 좀 더 포괄적인 타입을 선언해 조금 더 유동적으로 변수의 타입이 바뀔 수 있도록 지정해주는것이다.
예를 들어보자.
var age;
age = 54;
var age = "Fifty four"
자바에 익숙한 사람이라면 이해하기 힘들것이다. "분명 자바에서는 변수 타입을 선언해줘야 했는데 여기서는 'var'이라고 단순히 가변적인 변수임을 알려주고 그냥 변수에 정수와 문자열을 지정해주었다." 그렇지만 자바스크립트에서의 var은 "문자열 또는 숫자" 둘중에 하나로만 컴파일이 되며, 지정해준 데이터에 따라 자동으로 컴파일 당시에 변수 타입이 지정된다.
위의 예를들어 첫번째 age는 컴파일시 '정수'라는 데이터 타입이 자동으로 부여되고, 두번째 age는 컴파일 당시 '문자열' 이라는 데이터 타입이 자동으로 부여된다.
+ var을 통해 선언된 변수는 변수를 선언할때 초기화 해주지 않아도 된다. 첫번째 age변수처럼 변수를 선언만 해주고, 초기화는 나중에 해줘도 아무 문제가 없다!
2. const
위에서 말한 var은 '가변적인' 즉, 언제든 변할 수 있는 변수였다. 하지만 'const'로 선언된 변수 타입은 변할 수 없고, var과 다르게 선언과 동시애 초기화가 되어야 한다. 우리가 잘 알고 있는 자바에서의 'final'이다.
const PI = 3.14
또한, const로 선언된 변수는 재할당이 불가능하다.
const PI = 3.14
PI = 100 //오류 발생. const는 값을 변경 할 수 없음
3. let
let은 블록 스코프를 갖는 변수를 의미한다. let은 var과 같이 재할당이 가능하며, 블록 스코프 내에서만 유효한 변수이다.
if (true) {
let y = 20;
console.log(y); // 20
}
console.log(y); // ReferenceError: y is not defined
위의 예시처럼 아래 console.log(y)는 에러를 발생시킨다. 왜냐하면 변수 y는 if문 안의 {} 안에서만 사용될 수 있도록 'let'으로 선언했기 때문이다.
+var타입은 "함수 스코프"를 갖고있어 같은 함수 내에서만 유효하다!
이렇게 세 가지 키워드를 사용하여 변수를 선언할 수 있습니다. 종종 `let`과 `const`를 더 선호하는 추세가 있으며, `var`는 호이스팅과 스코프 등에서 발생하는 문제로 인해 사용을 권장하지 않는 경우가 많다.