728x90
var, let, const
var: 함수 범위 변수를 선언하는 데 사용됩니다.
let: 블록 범위 변수를 선언하는 데 사용됩니다. 변수 값을 변경할 수 있습니다.
const: 블록 범위 변수를 선언하며, 한 번 할당한 값을 다시 할당할 수 없습니다.
var(ES5 이전 버전에서 주로 사용)는 변수 재 선언이 가능합니다.
var name = 'Minjun';
console.log(name); // Minjun
var name = 'Seoyeon';
console.log(name); // Seoyeon
let는 변수 재 선언시 에러가 발생합니다.
let name = 'Minjun';
console.log(name);
let name = 'Seoyeon';
console.log(name);
/**
Chrome Error
VM62:4 Uncaught SyntaxError: Identifier 'name' has already been declared
VM62:4 Uncatched SyntaxError: 식별자 'name'이(가) 이미 선언되었습니다
Visual Studio Error
Cannot redeclare block-scoped variable 'name'.
블록 범위 변수 'name'을(를) 재정의할 수 없습니다.
*/
var는 선언하기 전에 사용 가능 합니다.
console.log(name); // undefined
var name = 'Minjun';
var는 최상위에 있는것처럼 동작합니다. 이를 호이스팅(Hoisting) 이라고 합니다.
선언에만 호이스팅이 일어나기 때문에 값을 할당해도 undefined가 반환됩니다.
let는선언하기 전에 사용할 수 없습니다.
console.log(name);
let name = 'Minjun';
/**
Chrome Error
Uncaught ReferenceError: name is not defined
Uncatched ReferenceError: 이름이 정의되지 않았습니다
Visual Studio HTML Error
Uncaught ReferenceError: Cannot access 'name' before initialization
Uncaught ReferenceError: 초기화 전에 'name'에 접근할 수 없습니다
*/
var, let, const 모두 호이스팅 되지만 TDZ(Temporal Dead Zone) 영역때문에 그렇습니다.
console.log(name); // Temporal Dead Zone
let name = 'Minjun'; // 선언 및 할당
console.log(name); // 사용
할당 전에는 사용할 수 없습니다
var : 선언 및 undefined로 초기화가 동시에 진행 됩니다.
let : 선언과 초기화가 분리되어 진행됩니다.
const : 선언과 할당이 동시에 진행 됩니다. 값을 변경할 수 없습니다.
var : 함수 스코프 (function-scoped)
let, const : 블록 스코프 (block-scoped)
// 함수안에서 선언된 변수는 외부에서 var, let, const 셋다 사용 불가능
// 함수외의 if, for, while, try/catch는 외부에서 var는 사용 가능 let, const는 사용 불가능
//* 함수 */
function hello() {
// Block
var name = 'Minjun';
let age = 20;
const gender = 'male';
}
hello();
console.log(name); // 빈값
console.log(age); // age is not defined
console.log(gender); // gender is not defined
//* if문 */
if(true) {
var name = 'Seoyeon';
let age = 20;
const gender = 'female';
}
console.log(name); // Seoyeon
console.log(age); // age is not defined
console.log(gender); // gender is not defined
//* for문 */
for(let i=0; i<10; i++) {
var name = 'Minjun';
let age = 20;
const gender = 'male';
}
console.log(name); // Minjun
console.log(age); // age is not defined
console.log(gender); // gender is not defined
//* while문 */
while (true) {
var name = 'Seoyeon';
let age = 20;
const gender = 'female';
break;
}
console.log(name); // Seoyeon
console.log(age); // age is not defined
console.log(gender); // gender is not defined
//* try/catch */
try {
var name = 'Minjun';
let age = 20;
const gender = 'male';
} catch (e) {
console.error(e);
}
console.log(name); // Minjun
console.log(age); // age is not defined
console.log(gender); // gender is not defined
ES6 이상의 환경이라면 var는 거의 사용하지 않고 let, const의 사용이 권장 됩니다.
변수의 재할당이 필요한 경우라면 let를 사용 그외의 경우에는 const를 사용한다고 보면 됩니다.
728x90
'javascript' 카테고리의 다른 글
자바스크립트로 정규 표현식 (Regular expression) 테스트 (1) | 2023.10.03 |
---|---|
자바스크립트(javascript) 클래스(Class) 알아보기 (0) | 2023.10.01 |
자바스크립트로 프로그레스바 만들기 (0) | 2023.09.02 |
자바스크립트로 파일 드래그 앤 드롭 업로드 방법 (0) | 2023.09.02 |
티스토리에서 자바스크립트로 클립보드 복사 만들기 (0) | 2022.10.25 |