[자바스크립트_개념정리] 함수범위
함수 범위
범위는 변수 가시성을 참조한다
함수 블록 ‘ { } ‘ 을 기준으로 변수를 선언한 위치에 따라 전역 변수와 지역 변수로 나뉘며 액세스 지점을 결정한다
[전역 변수]
var 변수;
function 함수() {
}
// 전역 변수는 함수 블록 밖이나 안에서 자유롭게 사용 가능
[지역 변수]
function 함수() {
var 변수;
}
// 지역 변수는 함수 블록 안에서만 사용 가능
변수의 Scope
: 블록에 의해 변수의 범위가 달라지는 것
[let 으로 변수선언한 경우]
=> if 블록 밖에서 먼저 선언되었던 num은 출력이 되지만 블록 안에서 선언된 price 와 drinks 는 블록 밖에서는 출력되지 않는다 (const도 마찬가지)
변수가 블록 안에서 선언되면 해당 변수들은 그 블록범위에서만 존재한다
[var 로 변수선언한 경우]
=> 변수선언에서 var를 쓰면 블록이 지정되지 않기 때문에 블록 밖에서도 액세스 가능하다
<br>
Lexical scope 렉시컬 범위
함수의 중첩
=> 부모 함수 안에 중첩된 내부 함수는 부모 함수나 조부모 함수의 범위 내에서 정의된 변수에 액세스할 수 있다
[ 렉시컬 범위 알아보기 ]
=> 상위 함수인 fruits에서 선언된 berries 배열을 wantToGet 함수와 order함수에서 접근해 활용할 수 있음
단, 역방향으로는 성립되지 않는다 (wantToGet 함수와 order함수에서 선언된 변수에 fruits 함수는 액세스할 수 없다)
[ 주의할 점 ]
=> fruits 함수만 실행해서는 출력값을 얻을 수 없고 그 속의 중첩된 함수(실행문이 적힌)들도 실행해야 출력값을 얻을 수 있다