본문 바로가기
JavaScript

JavaScript, Scope

by nacjji 2022. 11. 11.

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 객체에 속한다.

var 로 선언된 변수와 let 으로 선언된 변수의 차이

  • 전역 스코프 영역에서 선언된 변수는 어디서든 접근이 가능하기 때문에 의도치 않은 에러를 발생시킬 수 있기 때문에 사용을 최소화 해야 한다. 
  • const / let / var 의 선언 없이 변수를 선언하면 var 로 선언한 것으로 취급된다. 
  1. 전역 객체 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