varのリスク(例)

801 ワード

勉強中にいい例を見たので持ってきました!
もちろん、varhoistingによって問題が発生します.
この問題を解決したのはletconstである.
実行コンテキストでディレクトリ環境を個別に構成した後、initializeを使用してTDZをブロックすることで、結果的に初期化がブロックされるため、安全です!
しかし、最も重要なのは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()