var의 위험성(예제)

young_pallete·2021년 6월 25일
0

JavaScript

목록 보기
2/5

공부하다가 정말 좋은 예제가 보여서, 갖고 왔다!
물론 var의 경우 hoisting으로 인한 문제도 발생한다.

이를 해결한 것이 letconst다.
실행 컨텍스트에서 렉시컬 환경을 별도로 구성 후, initializeTDZ을 사용함으로써 막기 때문에, 결과적으로 초기화를 막아버렸기 때문에 안전하다!

그렇지만 무엇보다 var의 가장 주된 문제는

var은 함수 레벨 스코프에서 동작한다는 걸 계속 잊지 말자!
(어떻게 보면 둘 다 연관되어 있는 것 같긴 하지만 말이다)

var score1 = 0;
let score2 = 200;
const defaultScore = 0;

function outer() {
    // score은 함수 레벨 스코프이므로 다 접근 가능
    if (true) {
        var score = 0;
    }

    // i는 이미 함수 스코프 단위에서 존재하고 있음. 따라서 setTimeout가 실시된 0.1ms 이후에는 이미 처리가 완료되어 3이 3번 출력됨.
    for (var i = 0; i < 3; i++) {
        setTimeout(function() {
            console.log(i);
        }, 100);
    }

    console.log(score);
}

outer()
profile
People are scared of falling to the bottom but born from there. What they've lost is nth. 😉

0개의 댓글