코드팩토리 JS

23. scope

박성하하 2025. 12. 27. 14:55
728x90
반응형
/**
 * Scope
 */
var numberOne = 20;
function levelOne(){
    console.log(numberOne);                                        
}
// levelOne();

function levelOne(){
    var numberOne = 40;

    console.log(numberOne);
}

// levelOne();

console.log(numberOne);                                         // 20

function levelOne(){
    var numberOne = 40;

    function levelTwo(){
        var numberTwo = 99;

        console.log(`levelTwo numberTwo : ${numberTwo}`);       // 99
        console.log(`levelTwo numberOne : ${numberOne}`);       // 40
    }

    levelTwo();
    console.log(`levelOne numberOne : ${numberOne}`);           // 40
}

levelOne();
console.log(numberOne);                                         // 20
// console.log(numberTwo);

/**
 * JS -> Lexical Scope
 *
 * 선언된 위치가 상위 스코프를 정한다.
 *
 * Dynamic Scope
 *
 * 실행한 위치가 상위 스코프를 정한다.
 */
var numberThree = 3;

function functionOne(){
    var numberThree = 100;

    functionTwo();
}

function functionTwo(){
    console.log(numberThree);                                   // 3 , functionOne 안에서는 100이지만 functionTwo로 오는 순간 전역변수인 3이다(var이기 떄문)
}

functionOne();

var i = 999;

for(var i = 0; i < 10; i++){
    console.log(i);
}
console.log(`i in global scope : ${i}`)                         // 10

i = 999;
// block level scope
for(let i = 0; i < 10; i++){
    console.log(i);
}
console.log(`i in global scope : ${i}`);                        // 999

/**
 * var 키워드는 함수 레벨 스코프만 만들어낸다.
 *
 * let, const 키워드는 함수 레벨 스코프와 블록 레벨 스코프를 만들어낸다.
 */
728x90
반응형

'코드팩토리 JS' 카테고리의 다른 글

25. execution context  (0) 2025.12.27
24. this  (0) 2025.12.27
22. prototype chain  (0) 2025.12.27
21. Immutable Object  (0) 2025.12.26
20. property attribute  (1) 2025.12.26