var
키워드는 어떻게 사용되었나요?var
키워드를 사용합니다.// 기본적인 변수 선언과 할당 방법
var number; // 변수 number 선언
number = 9; // 변수 number에 9 할당
// 변수 선언과 할당을 동시에 하는 방법
var i = 10; // 변수 i 선언하고 숫자 10을 할당
var a = "apple"; // 변수 a 선언하고 문자열 apple를 할당
// 여러개의 변수를 선언하는 방법
var b = 1, c = 2, d = 3; // 여러개의 변수를 한번에 선언하고 할당
// 선언한 변수를 다시 선언하는 방법
var a = 0;
var a = 5; // 이미 선언된 변수 a를 다시 선언하면 값을 덮어씌울 수 있습니다.
console.log(a); // 5 출력
var
키워드로 선언된 변수의 유효범위는?// 함수 밖에 변수를 선언하면 전역 변수가 됩니다.
var scope = "global"; // 전역 변수 scope 선언.
function foo() {
// 함수 안에 변수를 선언하면 지역 변수가 됩니다.
var scope = "local"; // 지역 변수 scope 선언
console.log(scope); // 전역 변수가 아닌 지역 변수의 값 "local" 출력
}
console.log(scope); // 전역 변수의 값 "global" 출력
foo(); // 지역 변수의 값 "local" 출력
var
키워드로 선언한 변수는 함수 스코프 변수입니다.
함수 스코프 변수의 특징을 알아보겠습니다.
1. 함수 안에서 선언된 함수 스코프 변수는 함수 내부에서만 접근할 수 있는 지역 변수 입니다.
따라서 위의 함수 스코프 변수는 함수 밖에서 접근이 불가능 합니다.
3. 함수 밖에 선언한 함수 스코프 변수는 **전체 소스코드 어디에서든지 접근할 수 있는 전역 변수**입니다.
function foo(){
var a = "local";
}
console.log(a); // 호출 불가능
a = "global"; // 전역 변수 a 선언
function foo() {
a = "local"; // 함수 안에서 전역 변수 a의 값 변경
b = "global"; // 전역 변수 b 선언
}
foo();
console.log(a); // "local" 출력
console.log(b); // "global" 출력
b = "전역 변수 b 값 변경"
console.log(b); // "전역 변수 b 값 변경" 출력
let
키워드는 무엇이 다른가요?let
키워드는 블록 스코프 변수를 선언하는 키워드입니다.블록의 단위는 중괄호 {} 입니다.
블록 스코프 변수의 특징을 알아보겠습니다.
1. 블록 안에서 변수를 선언하면 변수가 선언된 블록과 그 하위 블록에서만 접근이 가능합니다.
function foo() {
let a = 2;
if(true) {
let b = 10;
console.log(a); // 변수 a가 선언된 블록의 하위 블록에서 접근 가능
}
console.log(b); // 변수 b는 if문 내부에서 선언되었으므로
// 블록 밖에서 접근 불가능
for (let i = 0; i < 10; i++) {
let c = 20;
}
console.log(c); // 변수 c는 for문 내부에서 선언되었으므로
// 블록 밖에서 접근 불가능
}
var
키워드와 비교 function foo() {
var a = 2;
if(true) {
var b = 10;
console.log(a); // a 접근 가능
}
console.log(b); // b 접근 가능,
// 변수 b는 var 키워드로 선언되었으므로
// 함수 내부 어디에서든지 접근 가능
for (let i = 0; i < 10; i++) {
var c = 20;
}
console.log(c); // c 접근 가능
//변수 c는 var 키워드로 선언되었으므로
// 함수 내부 어디에서든지 접근 가능
}
let
키워드는 변수 재선언이 불가능합니다.위에서 var
키워드로 변수를 선언할 경우, 변수 재선언이 가능하다고 했었습니다.
하지만 let
키워드로 변수를 선언할 경우, 선언된 변수와 동일한 이름의 변수를 다시 선언할 수 없습니다.
let a;
let a; // 이미 위에서 변수 a가 선언되었으므로 오류가 발생
let
키워드는 블록 스코프 변수이므로 다른 블록에서 동일한 변수명으로 변수를 다시 선언하면 새로운 변수가 선언됩니다.function foo() {
let a = 1;
var b = 2;
console.log(a); // 1 출력
console.log(b); // 2 출력
if (true) {
let a = 5; // if문 블록 안에서 동일한 이름으로
// 새로운 변수를 생성하면 if문 밖의 변수 a와 다른 변수 a가 선언된다.
// 이 변수 a는 if문 안에서만 존재한다.
var b = 10; // if 문 밖의 변수 b에 10을 덮어 씌운다.
console.log(a); // 5 출력
console.log(b); // 10 출력
}
console.log(a); // 1 출력
console.log(b); // 10 출력
}
foo();
const
키워드는 무엇이 다른가요?const
키워드로 변수를 선언하고 값을 할당하면 값을 변경할 수 없습니다.const a = 10;
a = 15; // 값을 변경하므로 에러 발생
const
키워드는 변수 선언과 할당을 동시에 해야합니다.const b; // 변수 b에 값이 할당되지 않았으므로 에러 발생
b = 5;
const
키워드는 let
키워드와 같은 블록 스코프 변수입니다.
const
키워드로 선언된 변수에 객체를 할당하면 객체 자체가 할당되는 것이 아니라 객체의 주소값이 할당됩니다.
const
변수를 이용한 객체 속성 변경이 가능합니다. 객체 속성을 변경할 경우, const
변수에 할당된 객체의 주소값은 바뀌지 않으므로 문제가 없습니다.
const object = {
"num" : 12
};
object.num = 10; // 속성에 새로운 값 할당 가능
console.log(object.num); // 10 출력
object = {"string": "bird"}; // object 변수에 새로운 객체의 주소값을 할당하므로 에러 발생