[learning javascript] chapter 7. 스코프

스코프

스코프와 존재

정적 스코프와 동적 스코프

const x = 3;

function f() {
    console.log(x);
    console.log(y);
}

{   // 새 스코프
    const y = 5;
    f();
}

전역 스코프

function greet() { console.log(Hello, ${name}!); } function getBirthYear() { return new Date().getFullYear() - age; }

- 함수가 호출하는 컨텍스트(스코프)에 의존적
- 어디에서든 상관없이 name값을 바굴 수 있어 버그 유발 확률 높음
```javascript
let user = {
    name = "Irena",
    age = 25,
}
function greet() {
    console.log(`Hello, ${user.name}!`);
}
function getBirthYear() {
    return new Date().getFullYear() - userage;
}

블록 스코프

변수 숨기기

{
    // 외부 블록
    let x = 'blue';
    console.log(x);     // "blue"
    {
        // 내부 블록
        let x = 3;      // 외부 블록의 x는 가려짐
        console.log(x); // "3"
    }
    console.log(x);     // "blue"
}
console.log(typeof x);  // "undefined"; x는 스코프에 있지 않음

함수, 클로저, 정적스코프

즉시 호출하는 함수 표현식

(function() {
    // IIFE 바디
})();

함수 스코프와 호이스팅

함수 호이스팅

사각지대

스트릭트 모드