const mood = 'Happy! ';
console.log(`I feel ${mood.repeat(3)}`);
// Expected output: "I feel Happy! Happy! Happy! "
[KEYWORD]
기본형, 참조형, 불변성, 메모리 주소, 식별자, 변수, 가변값, 데이터 영역, 변수 영역, 불변 객체, 얕은 복사, 깊은 복사,
undefined, null
다른 언어에서는 어떻게 데이터 타입을 정의 할까요?
다른 언어들처럼 데이터 타입을 다룬다면 장단점은 무엇이 있을까요?
기본형 데이터와 참조형 데이터를 굳이 왜 구분해서 다룰까요? 혹시 하나의 방식으로 다 다룰수는 없을까요?
왜 불변 객체를 이용해야 할까요? 어떤 실수가 있을 수 있을까요?
왜 자바스크립트에는 undefined와 null이 있을까요?
변수
: 변할 수 있는 수. 꼭 숫자여야 할 필요는 없다. -> 변할 수 있는 무언가.(데이터)
식별자
: 어떤 데이터를 식별하는 데 사용하는 이름, 즉 변수명
기본형 값이 담긴 주소값을 바로 복제해서 불변성을 가지고 있고,
참조형은 값이 담긴 묶음 가르키는 주소값을 가르킨다.
참조형은 객체들이니, 객체들은 따로 메모리에 할당된다.
즉, 객체는 프로퍼티들이 메모리에 따로 할당이 된다.
기본형이나 참조형이나 데이터 자체를 변경하고자 하면(새로운 데이터 할당)
기존 데이터는 변하지 않는다. 하지만 참조형은 '가변성'을 가지고 있는데,
이 가변은 데이터 자체가 아니라 내부 프로퍼티를 변경할때 성립하는 것이다.
이는 데이터 저장 방식부터 살펴보면 된다.
데이터 저장 방식부터 다르기 때문에 이후 동작에도 차이가 있다.
기본형은 값이 담긴 주솟값을 바로 복제하며 불변성을 가지고 있다.
참조형은 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다.
또한 참조형은 '객체의 변수(프로퍼티) 영역'이 별도로 존재한다는 점도 기본형과 다르다.
불변 객체에 대해서 알게된 만큼 작성해주세요
얕은 복사와 깊은 복사는 어떠한 차이점이 있으며, 그렇다면 각각의 복사는 어떠한 장단점이 있을까요?
[KEYWORD]
실행 컨텍스트, this, 환경 정보, 스택, 큐, 전역 컨텍스트, 콜스택, Variable Environment,
Lexical Environment, 호이스팅, 함수 선언문, 함수 표현식, 스코프, 스코프체인,
실행 컨텍스트는 무엇일까요?
: 실행할 코드에 제공할 환경 정보들을 모아놓은 객체
: 동일한 환경에 있는 코드들을 실행할 때 필요한 환경정보들을 모아 컨텍스트를 구성하고 이를 콜스택에 쌓아올렸다가, 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장.
: 구성하는 방법 - 함수를 실행 (자동 생성되는 전역공간과 악마로 취급받는 eval제외하면)
: ES6에서는 블록{}에 의해서도 새로운 실행컨텍스트가 생성됨.
실행 컨텍스트 객체가 활성화되는 시점에 수집되는 정보는 무엇일까요? 각각 왜 수집할까요?
: 실행 컨텍스트 객체가 활성화되는 시점에 수집되는 정보 - arguments
Variable Environment : 현재 컨텍스트 내의 식별자들에 대한 정보 + 외부 환경 정보. 선언 시점의 Lexical Environment 의 스냅샷으로, 변경 사항은 반영되지 않음.
Lexical Environment : 처음에는 Variable Environment와 같지만, 변경사항이 실시간으로 반영됨.
ThisBinding : this 식별자가 바라봐야 할 대상 객체
수집목적 : 자바스크립트 엔진은 해당 컨텍스트에 관련된 코드들을 실행하는 데 필요한 환경정보들을 수집해서 실행컨텍스트에 저장해놓는데, 이 객체는 엔진이 활용할 목적으로 생성할 뿐 개발자가 코드를 통해 확인할 수는 없다.
함수가 실행될때 함수가 실행 컨텍스트 위에 올라가고
코드가 실행되려면 렉시컬 환경(함수가 호출되면서 실행될 코드들이 담겨있는 곳)이 필요하고 렉시컬 환경을 미리 만들어두기 위해 호이스팅이 일어난다
우리가 실행 컨텍스트를 제대로 이해하지 못한다면 어떤 문제가 일어날까요?
동일한 변수를 사용했을 때, 원하는 변수에 원하는 값을 넣지 못하지않을까 ?
우리가 스코프를 제대로 이해하지 못한다면 어떤 문제가 일어날까요?
중복선언으로 인해 오류가 발생할 수 있다.