funtion 단위의 스콥을 가집니다.
var hello = 'world';
funtion test() {
var hello = 'korea';
console.log(hello);
}
test();
console.log(hello)
실행결과
korea
world
아래는 함수를 if 문으로 변경한 예제 코드입니다.
var hello = 'world';
if(true) {
var hello = 'korea';
console.log(hello);
}
//test();
console.log(hello)
실행결과
korea
korea
Var
로 선언한 변수의 스콥은 블록문이 아닌 function
이기 때문입니다.
첫번째 선언된 var hello = 'world';
는 글로벌 변수이고,
두 번째에 선언된 var hello = 'Korea';
는 로컬이기 때문에
위와 같은 결과는 바람직하지 않습니다.
var hello = 'world';
var hello = 'korea';
console.log(hello)
hello 라는 변수를 똑같이 하나 더 만들었습니다.
실행결과
korea
오류를 발생시키지 않고 korea
가 출력됩니다.
같은 변수를 두 번 선언하여도 오류가 발생하지 않습니다.
이런 경우에는 오류를 발생시키는 것이 더 좋습니다.
코드가 길고 복잡해질수록 어떤 변수명을 상용하고 있는지 파악이 어려워,
이런 상황에서 오류가 발생하지 않으면 원치않는 값이 덧칠해지게 되어 바람직하지 않습니다.
위의 예제 코드를 let
으로 변경한 코드입니다.
let hello = 'world';
let hello = 'korea';
console.log(hello)
실행결과
오류 발생
바람직한 결과입니다.
위에서 바람직하지 않은 결과가 나왔던 if
문을 let
에서 실행해보겠습니다.
let hello = 'world';
if(true) {
let hello = 'korea';
console.log(hello);
}
console.log(hello)
실행결과
korea
world
바랍직한 결과입니다.
let
은 변수를 선언한 블럭에서 유효합니다.
그래서 var
보다는 let
의 사용이 권장됩니다.
const
는 constant로 상수, 즉 변하지 않는 값을 뜻합니다.
const
변수를 선언하고, 값을 바꿔보겠습니다.
const num = 5;
num = 6;
console.log(num)
실행결과
오류 발생
한 번 정의가 되었기 때문에 재정의를 히게되면 오류가 발생합니다.
스콥은 let
과 동일합니다.
const 변수를 선언한 블록에서 유효합니다.
if
문 예제를 const
로 바꿔보겠습니다.
const hello = 'world';
if(true) {
const hello = 'korea';
console.log(hello);
}
console.log(hello)
실행결과
korea
world
const hello = 'world';
변수는 글로벌이고,
const hello = 'korea';
변수는 로컬이기 때문에 바람직한 결과입니다.
객체나 배열의 요소수정은 가능합니다.
//object
const drinks = {};
drink.caffe = 'latte';
drink.lemon = 'ade';
console.log(drinks)
const
객체 drinks 를 만들고, 키 밸류값을 만들어줍니다.
실행결과
{ caffe: 'latte', lemon: 'ade' }
오류가 발생하지 않고 const
로 선언된 객체에 키
밸류
값들이 추가됩니다.
// array
const arr = [ 1, 2, 3, 4, 5 ];
arr[0] = 100;
arr[4] = 500;
console.log(arr);
const
로 배열 arr 을 만들고, 요소수정을 했습니다.
실행결과
[ 100, 2, 3, 4, 500 ]
const
로 선언된 배열이지만 값 수정이 되었고, 반영이 되었습니다.
예전에도 var
, let
, const
에 대해 다뤘던 적이 있는데 벌써 1년이 지났네요.. ㅎㅎ JS를 안 다루다 보니 다 까먹어서 다시 공부해야겠네요. 아래 링크도 참고해보세요 !