(원시, 참조)자료형, 스코프

남성윤·2022년 7월 11일
0

Code States 학습

목록 보기
10/66

원시 자료형과 참조 자료형


원시 자료형

객체가 아니면서 메서드도 가지지 않는 데이터

원시자료형은 쉽게 말해서 각 이름표당 하나의 값이 들어간다고 생각하면 편하다. boolean, String, Number, undefined, null 이 여기에 속하며 이것을 원시 타입 데이터(primitive type data)라고도 부른다. 이 원시 자료형은 값 자체에 대한 변경은 불가능하지만, 변수에 다른 데이터를 할당하는것은 가능하다.

참조 자료형

값이 여러개인, 참조자료형은 이름표에 주소지가 적혀있다고 생각하면 편하다. JS에서 원시자료형이 아닌것들은 모두 참조 자료형인데, 배열([]), 객체({}), 함수(function(){}) 이 대표적으로 참조자료형에 속하는데, 이를 참조 타입 데이터(reference type data)라고도 한다. 배열, 객체등이 대량의 데이터를 쉽게 다루기 위해서 사용하는 만큼, 참조자료형은 보관함의 크기가 고정되어있지 않고 동적으로 크기가 변한다.

스코프


현재 실행되는 컨텍스트를 의미한다. 여기서 컨텍스트란 값과 표현식이 표현되거나 참조될 수 있음을 의미한다.

간단히 생각해서 스코프 = 관리할 수 있는 유효범위다.

스코프는 중첩이 가능하며, 가장 바깥의 스코프를 전역스코프, 그 외의 스코프는 전부 지역스코프라고 한다.

  1. 전역스코프
  2. 지역스코프

모든 변수에는 접근할 수 있는 범위가 존재하는데, 중괄호 안쪽에 변수가 선언되었는가, 바깥쪽에서 선언되었는가가 굉장히 중요하다. 이 범위를 스코프라고 한다.

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

예를 하나 들어서,

let x = 30;
function returnX(){
	return x
}
returnX()
function returnX(){
	let x = 30
}
returnX()

위와 같은 상황에서, 위쪽의 코드는 바깥의 전역변수 x에 접근하여 30이라는 리턴값을 받아낼 수 있지만, 아래쪽의 코드는 바깥쪽에서 안쪽으로 접근할 수 없기 때문에, 바깥에서 x값에 접근하려하면 ReferenceError: x is not defined 오류를 발생시키게 된다.

또한, 지역변수는 전역변수보다 더 높은 우선순위를 가지게 되는데

let x = 30;
function returnX(){
  let x = 60
	return x
}
returnX()

와 같은 상황에서 returnX함수에서는 전역변수인 x= 30보다 지역변수인 x=60이 우선순위를 가지게되어 60을 리턴해주게 된다.

변수 선언

이러한 스코프 규칙때문에 변수를 선언할때에도 조심해야한다.

var은 블록스코프를 무시하며, 재선언을 해도 에러를 내지 않지만, 전역변수를 var로 선언한다면 그것이 window 기능을 덮어씌워 문제를 발생시킬 수 있다. 만약, 선언키워드 없이 변수를 할당한다면, 마치 var로 선언된 전역 변수처럼 작동하게 된다.

변수 선언에는 세가지 키워드를 사용할 수 있는데, let, var, const가 이것이다.

letvarconst
유효 범위블록스코프 및 함수스코프블록스코프 및 함수스코프함수 스코프
값 재할당가능불가능가능
재선언불가능불가능가능
profile
안녕하세요, Blog 2022.06 ~

0개의 댓글