클로저란? MDN에서 정의하는 클로저를 직역하면 "클로저는 함수와 그 함수가 선언될 당시의 lexical environment의 상호관계에 따른 현상"입니다. 선언될 당시의 lexical environment란 실행 컨텍스트의 구성 요소 중 하나인 outerEnvironmentReference에 해당합니다. 즉 클로저는 내부함수 B가 A의 LexicalEnvironment를 사용하는 경우, 내부함수에서 외부 변수를 사용한다면 클로저라는 현상이 발생할 수 있습니다. 예제 1. var outer = fucntion () { var a = 1; var inner = function () { console.log(++a); } inner(); }; outer(); inner 함수 내부에서는 a를 선언하지 않았기..
콜백 함수는 다른 코드의 인자로 넘겨 주는 함수입니다. 어떤 함수 X를 호출하면서 인자로 콜백 함수 Y를 넘겨 주었다고 하면, 함수 X는 특정 조건일 때 Y를 호출하게 됩니다. 이처럼 콜백 함수는 다른 코드에게 인자로 넘겨줌으로써 그 제어권을 함께 위임한 함수입니다. 콜백 함수를 위임받은 코드는 자체적인 내부 로직에 의해 이 콜백 함수를 적절한 시점에 실행합니다. 콜백 함수는 함수다 콜백 함수로 어떤 객체의 메서드를 전달하더라도 그 메서드는 메서드가 아닌 함수로서 호출됩니다. var obj = { vals: [1, 2, 3], logValues: function(v, i) { console.log(this, v, i); } }; // (1) obj.logValues(1, 2); // { vals: 1, ..
this 자바스크립트에서의 this는 실행 컨텍스트가 생성될 때 thisBinding에 저장됩니다. 즉, 함수를 호출할 때 결정된다고 할 수 있습니다. 따라서 상황에 따라 this는 바뀌게 됩니다. 다음 다섯 가지 상황에 따라 this가 어떻게 결정되는지 알아보도록 하겠습니다. 1. 전역 공간에서의 this 전역 공간에서 this는 전역 객체를 가리킵니다. 브라우저 환경에서는 window, Node.js 환경에서는 global입니다. 전역 변수를 선언하면 자바스크립트 엔진은 이를 전역객체의 프로퍼티로도 할당합니다. 다음과 같이 말입니다. var a = 1; console.log(a); // 1 console.log(window.a); // 1 console.log(this.a); // 1 자바스크립트 엔..
실행 컨텍스트란? 실행할 코드에 제공할 환경 정보들을 모아놓은 객체. 동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고, 이를 콜 스택에 쌓아 올렸다가, 가장 위에 쌓여 있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장합니다. 실행 컨텍스트에 담기는 정보들 VariableEnvironment 현재 컨텍스트 내의 식별자들에 대한 정보 + 외부 환경 정보. 선언 시점의 LexicalEnvironment의 스냅샷으로, 변경 사항은 반영되지 않음. LexicalEnvironment 처음에는 VariableEnvironment와 같지만 변경 사항이 실시간으로 반영됨 ThisBinding 식별자가 바라봐야 할 대상 객체. +) VariableEn..
이 장을 읽으면서 가장 헷갈렸던 부분인 불변값, 불변객체, 복사에 대한 부분만 정리하겠습니다. 데이터 할당 자바스크립트 엔진은 데이터를 변수 영역과 데이터 영역, 두 부분에 할당합니다. 각각의 영역은 주소값과 데이터값을 가지는데, 변수 영역의 데이터값은 이름(변수명)과 값(데이터영역의 주소값)을 가지게 되고 데이터 영역의 데이터값은 'abc' 같은 실 데이터가 들어가게 됩니다. 이러한 데이터 할당은 데이터 변환을 자유롭게 할 수 있게 하고, 메모리를 효율적으로 관리할 수 있게 해 줍니다. 만약 a라는 변수에 5004번의 데이터가 할당되어 있는데, 이 값을 변경하고 싶다고 합시다. 자바스크립트는 5004번에 해당하는 데이터 자체를 바꾸려면 데이터 영역의 메모리를 늘리거나 줄이는 일을 해야 합니다. 이는 다..