일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MPA
- 서버 사이드 렌더링
- 변수 생성 단계
- webpack
- 가상 dom
- 로컬 스토리지
- 자바스크립트 함수
- 이벤트 버블링
- 세션 스토리지
- 리액트의 생명 주기
- CORS
- 브라우저 렌더링원리
- 자바스크립트
- 실행 컨텍스트
- 스코프 체인
- 깊은 복사
- 호이스팅
- CSS
- react
- 얕은 복사
- polyfill
- 주소창에 naver 입력시 일어나는 일
- async/await
- undeclared
- 자바스크립트의 클래스
- 프로미스
- 이벤트 캡처링
- props와 state 차이점
- 클라이언트 사이드 렌더링
- 리액트
Archives
- Today
- Total
Gapus Dev Blog
[자바스크립트] 스코프에 대해 본문
스코프
설명
- 스코프(Scope)는 자바스크립트에서 변수와 함수의 유효 범위를 의미
- 변수와 함수가 어디에서 선언 되었는지에 따라 결정되며,
코드 안에서 해당 변수나 함수에 접근할 수 있는 영역을 제한
스코프의 종류
전역 스코프(Global Scope)
- 코드 어디에서든 접근할 수 있는 최상위 스코프
- 전역 변수와 전역 함수는 전역 스코프에 선언되어 어디에서든 사용 가능
- 예시
var globalVariable = "전역 변수";
function globalFunction() {
console.log(globalVariable); // 전역 변수에 접근 가능
}
globalFunction(); // 출력: "전역 변수"
지역 스코프(Local Scope 또는 Function scope)
- 함수 내부에서 선언된 변수와 함수가 해당 함수 내부에서만 요효한 스코프
- 함수 스코프는 변수 충돌을 방지하고 변수의 가시성을 제한하는데 도움
- 예시
function localFunction() {
var localVariable = "지역 변수";
console.log(localVariable); // 지역 변수에 접근 가능
}
localFunction(); // 출력: "지역 변수"
console.log(localVariable); // 오류: localVariable은 지역 스코프 내에서만 유효
블록 스코프(Block Scope)
- 중괄호( { } )로 둘러싸인 코드 블록에서 선언된 변수가 해당 블록 내에서만 유효한 스코프
- if 문이나 for 문과 같은 블록에서 선언된 변수는 해당 블록 외부에서는 접근 불가
- ES6에서 도입된 let과 const 키워드를 사용하여 블록 스코프 생성 가능
- 예시
function blockScopeExample() {
if (true) {
var blockVariable = "블록 변수";
let blockScopedVariable = "블록 스코프 변수";
const constantVariable = "상수 변수";
console.log(blockVariable); // 블록 변수에 접근 가능
console.log(blockScopedVariable); // 블록 스코프 변수에 접근 가능
console.log(constantVariable); // 상수 변수에 접근 가능
}
console.log(blockVariable); // 출력: "블록 변수"
console.log(blockScopedVariable); // 오류: blockScopedVariable은 블록 스코프 내에서만 유효
console.log(constantVariable); // 오류: constantVariable은 블록 스코프 내에서만 유효
}
blockScopeExample();
렉시컬 스코프(Lexical Scope 또는 Static Scope)
- 함수가 어디에서 선언 되었는지에 따라 스코프가 결정되는 개념
- 함수는 자신이 선언된 위치에서 스코프를 상속받아 변수를 참조
- 예시
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
// bar의 선언된 위치가 전역이기 때문에 상위 스코프인 전역 스코프의 x = 1 을 참조하여 1이 2번 출력
스코프 체인(Scope Chain)
설명
- 자바스크립트에서 변수를 검색할 때 사용되는 메커니즘
- 변수를 찾기 위해 여러 스코프를 순차적으로 확인하는 과정
- 렉시컬 스코프에 기반
- 함수는 자신이 선언된 위치에서 스코프를 상속받기 때문에 해당 함수 내부에
선언된 변수 뿐만 아니라 상위 스코프에 선언된 변수를 참조 가능 - 일반적으로 함수 스코프에서 발생
- 기본 동작
- 함수 내부에서 변수를 참조할 때, 자바스크립트 엔진은 해당 변수를 먼저 함수의 내부 스코프에서 검색
- 만약, 변수가 해당 스코프에 존재하지 않으면, 엔진은 변수를 찾기 위해 상위 스코프로 이동
- 위 과정을 계속해서 상위 스코프로 이동하며 변수를 찾을 때까지 반복
- 검색 과정 중 변수가 발견되면 중단하고 해당 변수를 사용
- 변수가 전역 스코프까지 검색 되지 않으면, 변수가 정의되지 않은 상태로 간주되어 오류 발생
- 예시
function outerFunction() {
var outerVariable = "외부 변수";
function innerFunction() {
var innerVariable = "내부 변수";
console.log(outerVariable); // 외부 변수에 접근 가능
console.log(innerVariable); // 내부 변수에 접근 가능
}
return innerFunction;
}
var closure = outerFunction();
closure(); // 출력: "외부 변수", "내부 변수"
// innerFunction은 클로저 이기도 하지만, 클로저는 함수와 함수가 선언된 렉시컬 스코프의 조합
// 클로저는 자신이 선언될 당시의 스코프에 접근할 수 있는 능력을 가지고 있으며,
// 스코프 체인을 통해 외부 변수에 접근 가능
'프론트엔드 > JavaScript' 카테고리의 다른 글
[자바스크립트] 함수에 대해 (0) | 2023.11.20 |
---|---|
[자바스크립트] 클래스에 대해 (0) | 2023.11.19 |
[자바스크립트] == 과 === 에 대해서 (0) | 2023.11.14 |
[자바스크립트] Map과 Set (1) | 2023.11.13 |
[자바스크립트] 얕은 복사, 깊은 복사 (0) | 2023.11.12 |