[javascript] 스코프 - 변수의 유효범위

zoe·2022년 9월 6일

Javascript

목록 보기
17/19

1. 스코프의 정의

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

2. 스코프의 종류

2-1. 블록 스코프(block scope)

중괄호를 기준으로 나누어지는 범위이다.

2-2. 함수 스코프(function scope)

함수를 기준으로 나누어지는 범위이다.

3. 스코프 규칙

  1. 바깥쪽 스코프에서는 안쪽 스코프에 선언된 변수에 접근할 수 없다.
  1. 스코프는 중첩이 가능하다.
  1. 가장 바깥쪽에 있는 스코프를 '전역 스코프(global scope)', 나머지 스코프들은 '지역 스코프(local scope)'라고 부른다.
  1. 지역 변수는 전역 변수보다 우선 순위가 높다.

4. 스코프와 변수 선언

4-1. var / let / const 와 스코프

var 왠만하면 쓰지 말자.

var는 함수 스코프만 따르고, 블록 스코프에서는 스코프 규칙을 무시한다.
(함수 스코프 내에서는 var로 선언하여도 변수가 지역 스코프에 저장된다. 하지만, 블록 스코프 내에서 var로 선언하면 변수가 전역 스코프에 저장된다.)

또한 var는 let, const와 달리 재선언이 가능하다는 특징이 있다.

따라서, let과 const를 주로 사용하는 것이 안전하다.

4-2. 변수 선언시 주의할 점

  1. 전역 변수 남발 no.

전역 변수는 어디에서나 접근 가능하기 때문에 편리한 대신, 다른 함수나 로직에 의해 의도하지 않은 변경이 발생할 수 있다. (side effect)

  1. var로 전역 변수 선언 no.

var로 전역 변수를 선언하면, 브라우저의 전역 영역을 담고 있는 window 객체에 변수가 저장된다.

window 객체 내에는 브라우저 내장 기능을 위한 데이터가 이미 많이 저장되어 있는데, 복작복작한 이곳에 변수를 저장하면 서로 이름을 변경하거나 삭제하는 등의 문제가 발생하여 브라우저 내장 기능을 사용하지 못하게 될 수도 있다.

  1. 선언 없이 변수 선언 no.

선언 없이 변수를 선언하면, 지역 스코프 내에서 선언했다고 하더라도 전역 스코프에 변수가 저장되어, 2의 경우와 같은 결과를 초래한다.

++ strict mode사용하면 위와 같은 실수를 막을 수 있다.
strict mode 사용하려면, js 파일 상단에 'use strict'; 작성++

출처:
[그림]Understanding Scope in JavaScript
https://blog.devgenius.io/understanding-scope-in-javascript-f88e946636ac
[내용참고]생활코딩: javascript - execute context

profile
Zoë Park

0개의 댓글