![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/7C37o/btrdInaqwH1/aflkEkHdgf9pzrxRUY1041/img.png)
이벤트, Event Event 프로그래밍하고 있는 시스템에서 일어나는 사건(action) 혹은(occurrence)이며, 이는 원한다면 그것들에 어떠한 방식으로 응답 할 수 있도록 시스템이 말해주는 것입니다. - mdn - 시스템은 event가 발생될 때 몇몇 종류의 신호를 생산 또는 발생시키도 event가 발생되었을 때 action이 자동적으로 취해질 수 있는 메커니즘을 제공한다. Web에서, event는 browser 내에서 발생되고, 그것이 거주하는 특정한 요소에 부착되는 경향이 있다. 이것은 하나의 element 또는 element의 집합, 현재 탭에 load된 HTML문서, 전체 브라우저 윈도우 등이 될 수 있다. 이러한 이벤트는 다양한 타입이 있다. 키보드 또는 마우스 handling brow..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b9I25O/btq8cFapiQu/Jwof2AWio4GlZnQCkwmHl1/img.png)
다른 함수를 parameter로 받거나 함수를 반환하는 함수를 고차함수(higher-oreder function)라고 한다. (React library에서는 어떤 컴포넌트를 받아 새로운 컴포넌트를 반환하는 고차컴포넌트(HOC)란것도 있다..) 고차함수를 응용하는 함수형 프로그래밍 방법 중 하나로, parameter를 여러개 가진 함수를 한개의 parameter만 받는 함수의 조합으로 표현하는 기법을 currying이라고 한다. Currying Currying이란 1967년 Christopher Strachey가 Haskell Brooks Curry의 이름에서 착안한것이다. 수학과 컴퓨터 과학에서 Currying이란 다중인수를 갖는 함수를 단일 인수를 갖는 함수들의 함수열로 바꾸는 것을 말한다. -위키백과..
비동기란? 특정 코드의 연산의 종료를 기다리지 않고 다른 코드를 먼저 실행 하는 특성이다. 만약 동기적으로 코드가 실행된다면 특정코드의 연산이 끝나고 다음 코드가 실행이 되는것이다. 비동기 처리를 통해 여러가지 작업을 동시에 할 수 있다. Javascript에서의 비동기 javascript 코드는 동기적으로 실행되며, hoisting이 된 이후부터 차례대로 코드가 실행된다. 그렇다면 javascript에서는 어떻게 비동기 프로그래밍을 할 수 있을까? 일반적인 javascript로 연산하는 작업은 비동기 작업을 할 수 없다. 하지만 외부api(서버 등)에 연동할 때 비동기적인 코드를 작성할 수 있다. 외부 api가 실행되는 동안 다른 작업을 할 수 있도록 하는 것이다. 이는 javascript engine..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/VtZDn/btq6qh9GppX/Z1Yz5UqRqVxhtk4oqWUcjK/img.png)
Javascript에서 this의 값은 함수를 호출한 방법에 의해 결정된다. 실행중에는 할당으로 설정할 수 없고 함수를 호출할 때 마다 다를 수 있다. ES5에서 함수를 어떻게 호출했는지 상관없이 thist 값을 설정할 수 있는 bind method를 도입했고, ES2015는 스스로의 this 바인딩을 제공하지 않는 arrow function을 추가했다. this this는 상황에 따라 다른 값을 반환하므로 우리를 어렵게 한다. this는 어떤 객체에 호출되느냐에 따라 의미가 달라진다. 실행 컨텍스트의 property는 비엄격 모드에서 항상 객체를 참조하며, 엄격모드에서는 어떠한 값이든 될 수 있다. - 전역 문맥에서 this는 전역객체를 참조한다. window를 참조하는 것이다. - 함수 문맥에서는 함..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/rIhjR/btq4HHvyAUp/l57r09Aooq9Sqk9T1EZfR1/img.png)
Javascript는 run code, event collecting & processing, Queue의 하위 작업들을 담당하는 event loop에 기반한 동시성(concurrency)모델을 가지고 있다. Javascript Engine javascript 엔진은 javascript코드를 해석하고 실행하는 프로그램 또는 interpreter이다. Chrome과 nodejs환경에서 사용하는 V8 Engine, Safari에서 사용하는 Webkit 등 다양한 엔진이 있다. V8엔진을 예로들어 보자 JS Engine은 Memory heap과 Call Stack으로 구분이 된다. Heap : memory할당(변수, Object 등 할당)이 일어나는 부분이다. 구조화 되지 않는 넓은 메모리 영역을 지칭한다. ..
클로저는 function간 어휘적 환경의 조합이다. 클로저를 이해하기 위해 먼저 javascript가 어떻게 변수의 유효 범위를 지정(Lexical scoping)하는지에 대한 이해가 필요하다. Lexical Scoping(어휘적 범위 지정) init()은 지역변수 name과 함수 displayName()을 생성한다. displayName()은 init()내 정의된 내부 함수이며 init() 함수 본문에서만 사용할 수 있다. function init(){ let name = "init"; function displayName(){ console.log(name); } return displayName; } init(); init()함수는 지역변수 name과 function displayName()을 생성..
Hoisting - 호이스팅은 모든 선언을 (var, let, const, function 등)을 해당 유효범위의 가장 위로 끌어올린다는 느낌으로 이해하면 된다. - 주의할 점으로 물리적으로 코드의 상단으로 옮겨지는 것은 아니다. - 따라서 메모리에서의 변화는 없다. 코드에서 입력한 위치와 정확히 일치한 곳에 있다. - 호이스팅이 발생하는 이유는 변수의 생성과 초기화가 분리되어 진행되기 때문이다. - var, let, const 모두 hosting이 적용 되며, let, const 키워드는 TDZ에 의한 제약으로 변수 선언 이후에 사용 가능하다. (var, let, const 키워드에 대한 정리 kmj24.tistory.com/70) console.log(hoisting); //undefined var ..