The Web Developer 부트캠프 2022

JS BLOCK, var, lexical scope, 함수를 변수로

거위발바닥 2022. 9. 19. 17:52
BLOCK
 
let radius = 8;
if (radius > 0) {
    const PI = 3.14;
    let msg = 'HI!'
}
 
해당코드를 입력하고 console.log(radius)를 입력하면 8이 나오지만 console.log(PI)나 msg를 입력하면 나오지 않는다.
그 이유는 BLOCK 때문인데 { } 안의 대괄호는 전부 BLOCK이다. 함수대신 대괄호의 블록이 들어간다고 생각하면 된다. 
 
 
let radius = 8;
if (radius > 0) {
    var PI = 3.14;
    var msg = 'HI!'
}
 
하지만 위처럼 const 나 let이 아닌 var를 사용한다면 block 밖에서도 해당 변수를 입력하기 때문에
console.log(PI)나 msg를 입력하면 3.14와 HI!가 나온다.
 
lexical scope
 
function bankRobbery() {
    const heroes = ['Spiderman', 'Wolverine']
    function cryForHelp() {
        for (let hero of heroes) {
            console.log(`HELP US, ${hero.toUpperCase()}`);
        }
    }
    cryForHelp();
}
 
위와 같은 코드를 사용해 bankRobbery() 함수를 실행하면
HELP US, SPIDERMAN
HELP US, WOLVERINE
가 잘나온다. const heroes가 cryForHelp 함수 밖에 있는데도 저 변수를 인식하는 이유는 부모 함수안에 있는
변수이기 때문인데, 이것을 lexical scope 라고 부른다.