1. Scope : 참조 대상 식별자(identifier, 변수, 함수의 이름과 같이 어떤 대상을 다른 대상과 구분하여 식별할 수 있는 유일한 이름)를 찾아내기 위한 규칙
var x = 'global'
function scope_prac () {
var x = 'function scope'
console.log(x)
}
scope_prac()
console.log(x)
- var 로 선언된 변수 x 는 함수 밖에서 선언된 변수이다.(전역 변수)
- 이 때 함수 안에서 변수 x는 'function scope'로 다시 선언되었다.
- 첫 번째 console.log(x)에선 함수 내에 있는 변수 x 'function scope' 를 참조한다.
- 마지막 줄에 있는 console.log(x)에선 첫 번째 선언된 변수 x 'globlal' 를 참조한다.
- 전역변수 x 는 어디서든 참조할 수 있지만 함수 내의 변수는 함수 내에서만 참조할 수 있다.
- 이처럼 이름이 같은 변수를 참조할 때 어떠한 규칙으로 변수를 참조하게 되는데 이러한 규칙이 scope 이다.
2. Scope의 구분
- 전역 스코프
- 코드 어디서든 참조할 수 있음
- 전역 스코프에서 선언한 변수 : 전역변수
- 지역 스코프
- 함수 내에서 만든 스코프로 자기 자신과 하위 함수에서만 참조할 수 있음
- 지역 스코프에서 선언한 변수 : 지역변수
3. scope 와 const / let / var
유효 범위 | 값 재할당 | 재선언 | |
const | 지역(블록) 스코프 / 전역(함수) 스코프 | 불가능 | 불가능 |
let | 지역(블록) 스코프 / 전역(함수) 스코프 | 가능 | 불가능 |
var | 전역(함수) 스코프 | 가능 | 가능 |
4. 변수 선언시 주의할 점
- 전역객체(window)는 오직 브라우저에만 존재하나, 전역 영역을 담고 있다. 1
- 그래서 함수 선언식으로 함수를 선언하거나 var 키워드로 변수를 선언하면 window 객체에 속한다.
- 전역 스코프 영역에서 선언된 변수는 어디서든 접근이 가능하기 때문에 의도치 않은 에러를 발생시킬 수 있기 때문에 사용을 최소화 해야 한다.
- const / let / var 의 선언 없이 변수를 선언하면 var 로 선언한 것으로 취급된다.
- 전역 객체 object 는 전역 범위 global scope (en-US) 에 항상 존재하는 객체를 의미합니다. 자바스크립트에는 전역 객체로 선언된 객체들이 항상 존재합니다. 웹브라우저에서 스크립트가 전역 변수를 생성할 때, 그것들은 전역 객체의 멤버로서 생성됩니다. [출처 : https://developer.mozilla.org/ko/docs/Glossary/Global_object [본문으로]
'JavaScript' 카테고리의 다른 글
JavaScript 동기 비동기 (0) | 2022.11.12 |
---|---|
JavaScript 비동기 처리 이해하기(Callback) (0) | 2022.11.12 |
JavaScript Array(배열) (0) | 2022.11.04 |
JavaScript 클래스&객체 (0) | 2022.11.04 |
JavaScript 함수 (0) | 2022.11.04 |