Scope 는 한국 말로 범위, 영역이라고 한다
변수를 만들고 값을 할당하면 어디서든 그 변수의 이름으로 할당된 값을 가져올 수 있었다
하지만 변수에는 유효한 범위가 있어서 그범위를 벗어나게 되면 오류가 발생한다
지금 이 오류는 x라는 변수를 선언하지 않았기 때문이다
상황에 따라서는 변수를 선언했음에도 이런 오류를 만날 수 있다
변수의 유효범위
똑같이 3이 출력이 된다
그런데 함수 밖에서 x를 출력하면 어찌될까?
그럼 오류난다
자바스크립트 에서는 중괄호{} 로 감싼 코드를 블록문(Block Statement) 이라고 한다
이런 블록문 안에 선언된 변수들을 지역변수(Local Variable) 이라고 한다
이 지역변수는 블록문 내에서만 사용할 수 있는 변수이다
즉 변수 x가 유효한 범위는 myFunction 함수 안에서만 사용 가능 하다
그래서 함수 밖에 있는 console.log(x); 는 변수 x 가 유효하지 않은 곳에서 사용했기 때문에
정의되지 않았다는 오류가 발생한다
이 변수 x를 밖에서 선언하면
둘다 적용된다
이런 변수를 전역변수(Global Variable) 라고 부른다 전역에서 사용될 수 있기 때문
그럼 myFunction 내부에서 똑같은 이름의 지역변수를 선언하면 어떻게 될까?
myFunction 내부에서 x라는 지역 변수가 있는지 확인 한 후 없으면 전역변수 x를 사용하고 지역변수 x 가있다면 지역변수 x를 먼저 사용한다