javascript & Node.js/javascript
자바스크립트 프로토타입과 클래스
자바스크립트는 프로토타입 기반 언어 클래스 기반 언어에서는 상속을 사용하지만 프로토타입 기반 언어에서는 어떤 객체를 원형으로 삼고 이를 복제함으로써 상속과 비슷한 효과를 얻는다. 프로토타입의 개념 이해 constructor, prototype, instance 어떤 생성자 함수를 new 연산자와 함께 호출하면 Constructor에서 정의된 내용을 바탕으로 새로운 인스턴스가 생성된다. 이때 instance에는 proto 라는 프로퍼티가 자동으로 부여되는데, 이 프로퍼티는 Constructor의 prototype이라는 프로퍼티를 참조한다. prototype이라는 프로퍼티와 proto라는 프로퍼티가 새로 등장했는데, 이 둘의 관계가 프로토타입 개념의 핵심이다. Prototype const person = n..
자바스크립트 클로저
1. 클로저란? 어떤 함수 A에서 선언한 변수 a를 참조하는 내부 함수 B를 외부로 전달할 경우 A의 실행 컨텍스트가 종료된 이후에도 변수 a가 사라지지 않는 현상 (외부 함수의 LexicalEnvironment가 가비지 컬렉팅되지 않는 현상.) /** * outer()에서 변수 a를 선언했고, outer의 내부함수인 * inner 함수에서 a의 값을 1을 증가. */ const outer = function () { let a = 1; const inner = function () { // inner 함수 내부에서 a를 선언하지 않아서 environmentRecord에서 // 값을 찾지 못해 outerEnviornmentReference 에서 // 지정된 상위 컨텍스트인 outer의 LexcialEnv..
자바스크립트 콜백 함수
콜백함수란? 콜백 함수란 다른 코드(함수 또는 메소드)에게 인자로 넘겨줌으로써 그 제어권도 함께 위임한 함수이다. 콜백 함수를 위임받은 코드는 자체적인 내부 로직에 의해 이 콜백 함수를 적절한 시점에 실행한다. let count = 0; const cbFunc = function () { console.log(count); if (++count > 4) { clearInterval(timer); } }; const timer = setInterval(cbFunc, 300); cbFunc()의 호출 주체 및 제어권 = 사용자 setInterval(cbzFunc, 300)의 호출주체 및 제어권 ⇒ setInterval setInterval이라고 하는 다른 코드에서 첫 번째 인자로서 cbFunc 함수를 넘겨주..
자바스크립트 this
다른 객체지향 언어에서는 this가 클래스에서만 사용할 수 있지만, 자바스크립트에서는 어디서든 사용할 수 있어서 사람들이 가장 혼란스러워하는 개념 중 하나를 정리했습니다. 1. 다양한 this 자바스크립트에서 this는 기본적으로 실행 컨텍스트가 생성될 때 함께 결정됨. (this는 함수를 호출할 때 결정됨) 1-1. 전역 공간 this 전역 공간에서 this는 전역 객체를 가리킴. (개념상 전역 컨텍스트를 생성하는 주체가 전역 객체이기 때문) 전역 객체는 자바스크립트 런타임 환경에 따라 다른 이름과 정보를 가짐 (브라우저 환경에서의 전역 객체 → window, Node.js 환경에서의 전역 객체 → global) var a = 1; console.log(a); // 1 console.log(window..
자바스크립트 실행 컨텍스트
실행 컨텍스트란? 실행할 코드에 제공할 환경 정보들을 모아놓은 객체. 동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고, 이를 콜 스택에 쌓아올렸다가, 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장. 이때 하나의 실행 컨텍스트를 구성하는 방법(동일한 환경을 구성)은 전역 공간 eval() 함수 함수가 있음. 이때, 자동으로 생성되는 전역 공간과 사용하는 것을 추천하지 않는 eval을 제외하면 우리가 흔히 실행 컨텍스트를 구성하는 방법은 함수를 실행하는 것임. 실행 컨텍스트에 담기는 정보 VariableEnvironment 여기에 담기는 내용은 LexicalEnvironment와 같지만 최초 실행 시의 스냅샷을 유지한다..