스코프(Scope)

kimjaewon·2023년 4월 24일
0

스코프(Scope)

스코프(Scope) 영어 단어 자체는 범위라는 의미이다

자바스크립트에서도 범위하는 의미를 가지고 있다


스코프란?

식별자 접근 규칙에 따른 유효 범위

● 스코프의 정의는 식별자 접근 규칙에 따른 유효 범위이다

식별자(변수, 함수, 클래스)에 접근할 수 있는 범위가 존재한다

● 범위는 중괄호(블록) 또는 함수에 의해 나눠진다 (그 범위를 스코프라 부름)

● 그래서 각각을 Block ScopeFunction Scope라 부름


스코프의 주요 규칙

1. 안쪽 스코츠에서 바깥쪽 스코프로 접근할 수 있지만 반대는 불가능하다

● 바깥쪽 스코프에서 선언한 식별자는 안쪽 스코프에서 사용 가능하다

● 반면 안쪽에서 선언한 식별자는 바깥쪽 스코프에서는 사용할 수 없다

2. 스코프는 중첩이 가능하다

3. 전역 스코프와 지역스코프

● 가장 바깥쪽의 스코프를 전역 스코프(Global Scope)

● 전역이 아닌 다른 스코프는 전부 지역 스코프(Local Scope)

4. 지역 변수는 전역 변수보다 우선순위가 더 높다

● 전역 스코프에서 선언한 변수는 전역 변수이다

● 지역 스코프에서 선언한 변수는 지역 변수이다

지역 변수는 전역 변수보다 더 높은 우선순위를 가진다


스코프와 키워드

const 키워드
● 유효 범위: 블록 스코프/ 함수 스코프
● 값 재할당: 불가능
● 재선언: 불가능

let 키워드
● 유효 범위: 블록 스코프/ 함수 스코프
● 값 재할당: 가능
● 재선언: 불가능

var 키워드
유효 범위: 함수 스코프
값 재할당: 가능
재선언: 가능

블록 스코프 안에서 letconst 키워드로 선언한 변수는 스코프 안에서만 참조가 가능하지만
var 키워드로 선언한 변수는 블록 스코프를 무시하고 스코프 울타리 밖에서도 접근이 가능하다(varOnly 함수 스코프만 따른다)


전역 변수는 최소화하기

● 가장 바깥 스코프에 정의한 변수가 전역 변수이다(즉, 어디서든 접근이 가능하다)

● 전역 변수를 최소화 하면 side effect(의도치 않은 로직에 의해 문제 발생) 를 줄일 수 있다

● 그런데 전역 변수를 var로 선언하는 경우 문제가 될 수 있다
1. 전역 변수는 어디서나 접근 가능
2. var 키워드는 블록 스코프를 무시
3. 재선언과 재할당이 가능
4. 전역 변수를 var로 선언해서 브라우저의 내장 기능을 못하게 만들 수도 있다

선언 없는 변수 할당 금지

● 선언 없이 변수를 할당하면 해당 변수는 var로 선언한 전역 변수 처럼 취급 된다

● 실수를 방지하기 위해 Strict Mode를 사용할 수 있다
1. Strict Mode는 브라우저가 보다 엄격하게 작동하도록 만들어준다
2. 선언 없는 변수 할당의 경우도 에러로 판단해준다
3. 적용하려면 js파일 상단에 'use strict' 러고 입력하면 된다(다옴표 포함이다)

profile
올라가자

0개의 댓글