TIL. 스코프

김은서·2022년 7월 11일
0

TIL

목록 보기
8/52

스코프

: 변수에 접근할 수 있는 범위

변수 접근 규칙에 따른 유효 범위

  1. 바깥쪽 스코프에서 선언한 변수는 안쪽 스코프에서 사용 가능
    안쪽 스코프에서 선언한 변수는 바깥쪽 스코프에서 사용 불가능
  2. 스코프는 중첩이 가능하다
  3. 가장 바깥의 스코프는 특별히 전역 스코프(Global scope)라고 부름 <-> 지역스코프(Local scope)
  4. 지역 변수는 전역 변수보다 더 높은 우선순위를 가짐

스코프의 종류

블록 스코프 (block scope)

: 중괄호로 둘러싼 범위
: 블록 스코프 안에서 정의된 변수는 블록 범위를 벗어나는 즉시 접근할 수 없음 (ReferenceError)

함수 스코프(function scope)

: 함수로 둘러싼 범위

단, 화살표 함수로 둘러싼 범위는 블록 스코프로 취급

블록 스코프(Block scope)와 var 키워드

var

: 변수를 정의하는 또 다른 키워드

: var 키워드는 블록 스코프를 무시하고, 함수 스코프만 따름(이전방식)
모든 블록 스코프를 무시하는건 아님(화살표 함수의 블록 스코프는 무시하지 않음)

: 블록 단위로 스코프를 구분했을때, 훨씬 더 예측 가능한 코드를 작성할 수 있도록 let 키워드 사용을 권장

: var를 사용하지 않는다 해도, 함수 스코프는 let으로 선언된 변수의 접근 범위를 제한함

var 키워드의 특징

var 키워드보다 let 키워드가 더 안전한 이유
: var 키워드는 재선언을 해도 아무런 에러도 내지 않지만, let 키워드는 재선언을 방지함

const

: 값이 변하지 않는 상수를 정의할 때 쓰는 키워드

: let과 동일하게 블록 스코프를 따름

: 값의 변경을 최소화하여 보다 안전한 프로그램을 만들 수 있음.
값을 새롭게 할당할 일이 없다면, const 키워드의 사용을 권장

: 값을 재할당 할 경우, TypeError를 냄

let, const, var 키워드 비교

변수 선언에서 주의할 점

window 객체 (브라우저 only)

var로 선언된 전역 변수 및 전역 함수는 window 객체에 속하게 됨

: 브라우저에는 window라는 객체가 존재

  • 브라우저 창을 대표하는 객체
  • 그러나, 브라우저 창과 관계없이 전역 항목도 담고 있음

전역 변수는 최소화 하기

전역 변수에 너무 많은 변수를 선언하지 말기

: 전역 변수: 어디서든 접근 가능한 변수

: 편리한 대신, 다른 함수 혹은 로직에 의해 의도되지 않은 변경이 발생할 수 있음

  • 부수 효과(side effect) 발생

let, const를 주로 사용하기

var는 블록 스코프를 무시하며, 재선언을 해도 에러를 내지 않음

: 같은 스코프에서 동일한 이름의 변수를 재선언 하는 것은 버그를 유발

전역변수를 var로 선언하는 경우 문제가 될 수 있음

: var로 선언한 전역변수가 window 기능을 덮어씌워서 내장 기능을 사용할 수 없게 만들 수 있음

선언 없는 변수 할당 금지

선언 키워드(let, const, var)없이 변수를 할당하지 말기

: 선언 없이 변수를 할당하면, 해당 변수는 var로 선언한 전역 변수처럼 취급됨

실수를 방지하기 위해 Strict Mode를 사용할 수 있음

: 브라우저가 보다 엄격하게 작동하도록 만들어줌
선언 없는 변수 할당의 경우도 에러로 판단해줌

0개의 댓글