본문 바로가기
Programming/Javascript

[Javascript]Javascript 자바스크립트의 변수(var,const,let) 과 scope

by SheenaKaze 2024. 8. 11.
// 전역 스코프 global scope , 블록 스코프 block scope , 함수 스코프(function scope)
let blockScopeVariable = "Available only in this block";


if(true) {
    // var blockScope = "Visible inside this block";
    let blockScope = "Visible inside this block";

    console.log(blockScope);
}

// console.log(blockScope);
console.log(blockScopeVariable);
// console.log(blockScope);



// for (let i =0;i<3;i++) {
//     console.log(i);
// }

for (var i =0;i<3;i++) {
    console.log(i);
}
console.log(i);



function test() {
    var test = "any words";
    if(true) {
        var test = "change words";

    }

    console.log(test);
}

test();


// 결론 :
// var를 사용하면 안되는 이유
// 자바스크립트의 변수 중 let, const, var는 각각 변수의 영향력이 미치는 범위가 다르다(scope가 다르다)
// let과 const는 block const를 가지고 선언된 블록 내에서만 유효하다.
// 하지만 var의 경우 block scope 보다 큰 함수 scope를 가지며, 이에 따라 예측 불가능한 코드를 작성하게 될 확률이 크다.
// let : 변수의 값을 필요에 따라 유연하게 변경해야할 때 사용
// const : 변수의 값을 변경할 필요없이 변경되지 않는 변수 = 상수를 선언할 때 사용
// 따라서 let, const 는 block scope이기에 유효권 바깥에서의 접근을 제한하고, 변수의 충돌을 방지하여
// 프로그램 안정성을 높일 수 있다.
// 1. var는 block scope 보다 영향권이 큰 함수 스코프를 가지며, 함수 내부 어디에서든 접근할 수 있게 된다.
// -> 이는 또 다른 변수를 만들 위험이 있다.
// 2. hoisting 문제 : let, const는 처음 hoisting 될 때 undefinend를 할당 안받음
// const나 let은 초기값을 undefined를 할당받지 않는다.