오늘은 자료형과 스코프 클로저에 대해 배웠다.
원시자료형 - number, boolean, null, undefined, string
stack 이라는 사물함에서 물건을 꺼내는 방식
원시 자료형을 할당하는 경우, 그 값 자체를 변수에 할당함. (그 값을 복사해서 변수에 저장)
예시)
let x = 2;
let y = x;
y = 3;
//x는 여전히 2임.
//x의 값을 y로 복사해서 할당했기 때문에 변수 x에 영향 미치지 않음.
참조자료형 - 배열, 객체, 함수
stack 이라는 사물함에 heep의 주소값을 넣어 주소값에서 가져온다
같은 주소를 가진 값을 다른 변수에 할당하고 그 변수를 변경하면 원본에 있던 주소값도 바뀐다
예시)
let x = { foo: 3 };
let y = x;
y.foo = 2;
// 변수 x의 값의 주소가 y에 할당되고, y.foo가 2로 변경되었으므로
// 같은 주소인 x.foo도 2가 되어야 함.
스코프 - 변수 접근 규칙에 따른 유효 범위
예를 들어 설명하겠다
let out = "코드모델";
if(out) {
let in =${out} 블로그
;
console.log(in);
}
console.log(in)
1.먼저 out문을 선언해주고 코드모델
을 할당해준다
2.그 후 if문안에 in을 선언해주고 ${out}블로그
를 할당해준다
3.그 후 if문 안에서 in을 출력해보고(a) 밖에서도 in을 출력해본다.(b)
a의 결과는 코드모델 블로그 이고 b의 결과는 ReferecneError이다.
이유는 if문의 괄호 기준으로 out의 경우 바깥쪽에 선언되었고 in은 안쪽에 선언되었기 때문이다.
즉 중괄호로 나누어 지는 범위를 스코프라고 하며 바깥쪽 스코프에서 선언된 변수는 안쪽 스코프로 들어갈 수 있지만 안쪽 스코프에서 선언된 변수는 바깥쪽 스코프로 나갈 수 없다는 것 이다.
스코프의 2번째 규칙으로는 중첩이 가능하다는 것 이다.
가장 바깥쪽에 있는 스코프를 전역 스코프
괄호 안에 있는 모든 스코프를 지역 스코프라 부른다.
이것은 자바의 전역번수 지역번수와 비슷한 개념 같다.
전역변수에서 name을 선언하고 지역변수에서 let name을 한다면 name은 지역변수를 빠져 나갈때 사라지지만
전역변수에서 name을 선언하고 지역변수에서 name을 한다면 name은 지역변수를 빠져 나갈 때 지역변수의 name이 되어 출력된다.
블록스코프 - {}
함수스코프 - function{}
let - 블록 스코프 범위, 재선언을 방지
var - 블록 스코프를 무시하고, 함수 스코프만 따른다
const - 변하지 않는 값 = 상수(constant)를 정의할 때 이용,재할당이 불가능
출처: 코드스테이츠
클로저 특징
1.함수를 리턴하는 함수
2.특정 데이터를 스코프 안에 가두어 둔 채로 계속 사용할 수 있게 해준다
참조 자료형의 ===(strict equality)는 주소값이 같은지를 확인한다.
.
오늘은 개념위주의 수업을 진행하였다. 클로저는 살짝 미숙한 감이 있기에 내일 복습한 후 총 정리 문제를 풀 예정이다.