- var
var 변수는 재선언(중복선언)되고, 재할당(업데이트) 된다.
// 재선언
var apple = 'apple'
apple // 'apple'
var apple = 'banana'
apple // 'banana'
// 재할당
var apple = 'apple'
apple = 'banana'
apple // banana
var 변수는 전역 범위 또는 함수 범위로 지정된다. (함수 레벨 스코프)
즉, 함수 밖에서 var를 사용하여 선언된 변수는 전체 윈도우에서 사용할 수 있고, 함수 안에서 선언된 변수는 함수 내에서만 사용 가능하다.
function callName(){
var name = 'heejae'
if(name === 'heejae') {
var name = 'leeheejae'
var nickname = 'jae'
console.log(name, nickname) // leeheejae, jae
}
console.log(name, nickname) // leeheejae, jae
}
console.log(name) // ReferenceError: name is not defined
console.log(nickname) // ReferenceError: nickname is not defined
문제점
코드가 많아질 경우, 같은 변수를 중복해서 사용할 수 있고, 예상치 못하게 변수가 재선언 또는 재할당 되어 많은 버그를 발생시킬 수 있다.
- let
let 변수는 재할당은 가능하지만, 재선언은 불가능하다.
// 재할당
let apple = 'apple'
apple = 'banana'
apple // banana
// 재선언
let apple = 'apple'
let apple = 'banana'
apple // SyntaxError: Identifier 'apple' has already been declared
let 변수는 코드 블록({}, 중괄호) 내부에서만 유효하다. (블록 레벨 스코프)
function callName(){
let name = 'heejae'
if(name === 'heejae') {
let name = 'leeheejae'
let nickname = 'jae'
console.log(name, nickname) // leeheejae, jae
}
console.log(name) // heejae
console.log(nickname) // ReferenceError: nickname is not defined
}
- const
const 변수는 재선언, 재할당 모두 불가능하다.
// 재선언
const apple = 'apple'
const apple = 'banana'
apple // SyntaxError: Identifier 'apple' has already been declared
// 재할당
const apple = 'apple'
apple = 'banana'
apple // TypeError: Assignment to constant variable.
const 변수는 let 변수와 마찬가지로, 코드 블록({}, 중괄호) 내부에서만 유효하다. (블록 레벨 스코프)
function callName(){
const name = 'heejae'
if(name === 'heejae') {
const name = 'leeheejae'
const nickname = 'jae'
console.log(name, nickname) // leeheejae, jae
}
console.log(name) // heejae
console.log(nickname) // ReferenceError: nickname is not defined
}
결론
var 변수는 사용하지 말 것
재할당이 필요할 경우 let 변수를 사용하되, 변수의 스코프를 최대한 좁게 만들기
재할당이 필요없는 상수나 객체에는 const를 사용하기
'JavaScript > 문법' 카테고리의 다른 글
[자바스크립트] 자주 사용하는 정규 표현식 (주민번호, 전화번호, 이메일, 특수문자) (0) | 2023.08.02 |
---|---|
[자바스크립트] 배열 중복 인덱스 찾기(for문, indexOf) (0) | 2023.04.25 |
[자바스크립트] 배열 중복값 찾기(filter, indexOf) (0) | 2023.04.25 |
[자바스크립트] 배열 중복 제거하기(전개연산자, Array.from, new Set, filter, indexOf) (0) | 2023.04.25 |
[자바스크립트] sort() 배열 정렬하기 (숫자, 영어, 대문자, 소문자, 한글) (0) | 2023.04.19 |