변수 선언 방식
var
- 중복 선언 가능. 재할당 가능
var title = "book";
console.log(title); //book
var title = "movie";
console.log(title); //movie
var title = "music";
console.log(title); //music
- 위 코드와 같이 선언한 변수가 동일한 이름으로 중복 선언이 가능하다
- 즉, 마지막에 할당된 값이 최종 변수에 저장된다.
let
- 중복 선언 불가. 재할당 가능
let title = "book";
console.log(title); //book
let title = "movie";
console.log(title); //Uncaught SyntaxError: Identifier 'title' has already been declared
title = "music";
console.log(title); //music
- 해당 변수는 이미 선언되었다는 에러 메시지 뱉는다
- 즉, 중복선언이 불가하다. 하지만 변수에 값을 재할당 하는것은 가능하다.
const
- 중복선언 불가. 재할당 불가
const title = "book";
console.log(title); //book
const title = "movie";
console.log(title); //Uncaught SyntaxError: Identifier 'title' has already been declared
title = "music";
console.log(title); //Uncaught SyntaxError: Identifier 'title' has already been declared
스코프(Scope)
- 유효한 참조 범위가 다르다.
var
- 함수레벨 스코프(funciton level scope)
function function_level(){
if(true){
var a = 123;
console.log(a); //123
}
console.log(a);
}
function_level(); //123
console.log(a);//ReferenceError: a is not defined
- 함수내에서 선언된 변수는 함수 내에서만 유효하고, 함수 내에서는 블록 내외부에 관계없이 유효하다.
- 함수 외부에서는 참조불가.
let / const
- 블록레벨 스코프(block level scope)
function block_level(){
if(true){
let a = 123;
console.log(a); //123
}
console.log(a); // ReferenceError: a is not defined.
}
console.log(a);// ReferenceError: a is not defined.
- 함수, if절 외 for, while, try/catch 등 모든 코드블록 ({...}) 내부에서 선언된 변수는 코드 블록 내부에서만 유효하다
- 블록 외부부터 참조 불가
function fCk(){
//실행 블락을 일부러 {로, 객체 아니고, 그냥 블록
{
let msk = "김미선";//블록 레벨 스코프
var hml = "이혜민"; //함수레벨 스코프
}
alert(hml); // var 뜬다 var는 function 키워드 안에 살아있어서 튼다
alert(msk); //let 안뜸 let는 중괄호 안에서 살아있어서 let 해당 중괄호 밖이라서 안뜬다
}
fCk();
alert("체크"+hml); //안뜸
const kms = "김미선" // 원시타입
kms = "미선김"; // 안됌!! 상수라서 못 바꿈
const kms2 ={
name:"김미선2",
age : 19
}
kms2.name = "머진미선" //객체 내용물 변경 가능!
kms={name:"혜민"}; // 안됌!! 객체 자체는 못바꿈
- const 원시타입이라고 kms2.name 은 객체 타입이라서 객체 타입은 변경이 가능하지만 원시 타입 자체를 변경이 안된다.
출처
https://cheershennah.tistory.com/231
'이론' 카테고리의 다른 글
[Web] DOM이란?(feat. BOM) (0) | 2024.09.25 |
---|---|
[WEB]WEB(아파치)과 WAS(톰캣) (1) | 2024.09.25 |
[Design Pattern] Singleton Pattern (싱글톤 패턴) 알아보기 (0) | 2024.09.12 |
메모리 구조 [Memory Structure] (0) | 2024.09.08 |