관리 메뉴

흰둥씨의 개발장

[자바스크립트] 딥다이브 ) 스코프 본문

BoOk/JS deep dive

[자바스크립트] 딥다이브 ) 스코프

돈워리비해삐 2023. 5. 25. 22:26

스코프 (scope, 유효범위) 

ㄴ식별자가 유효한 범위

ㄴ자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙

ㄴ네임스페이스(같은 공간에서 같은 이름 식별자 사용불가)

 

 

  - 1) 스코프의 종류 

*전역(global) : 코드의 가장 바깥영역 (함수바깥)

*지역(local) : 함수 내부

ㄴ변수는 자신이 선언된 위치(전역인지 지역인지)에 따라 스코프가 결정됨 

ㄴ전역변수: 전역에서 선언된 변수(어디서든 참조가능)

ㄴ지역변수 : 지역에서 선언된 변수 (함수내와 해당함수의 하위 지역 스코프에서만 유효함)

 

  - 2) 스코프 체인

ㄴ스코프가 함수의 중첩에 의해 계층적 구조를 가짐

ㄴ상위스코프 변수는 하위스코프에서 참조가능

ㄴ하위스코프 변수는 상위스코프에서 참조불가

 

  - 3) 함수, 블록 레벨 스코프

* 블록레벨스코프 (block level scope) : 모든 코드블록 (if, for while, try/catch...)이 지역스코프가 됨

* 함수레벨 스코프 (function level scope) : var키워드 변수는 오로지 함수내만을 지역스코프로 인정함 

var n = 1; //전역변수

if(true){
var n = 10; //전역변수, var는 코드블록안을 지역스코프로 인정하지 않고 함수내만을 지역스코프로 인정함 
}

console.log(n) //10

 

  - 4) 렉시컬 스코프

* 동적 스코프 (dynamic scope) : 함수가 호출되는 시점에 동적으로 상위스코프를 결정함 

* 렉시컬 (정적) 스코프 (lexical scope = static scope): 함수정의가 평가되는 시점에 상위스코프가 정적으로 결정됨

ㄴ자바스크립트는 렉시컬 스코프를 따르기 때문에, 함수를 어디서 정의했는지에 따라 상위스코프를 결정함