자바스크립트 3

우선순위 큐 올바른 dequeue

다음과 같이 enqueue와 dequeue메서드를 포함한 클래스가 있다. class PriorityQueue { constructor() { this.store = []; } enqueue(item) { this.store.push(item); } dequeue() { let start = 0; this.store.forEach((item, index) => { if (this.store[start][1] > this.store[index][1]) { // 가장 작은것을 찾음 start = index; } }); return this.store.splice(start, 1); } } 처음에는 아래의 코드 처럼 dequeue를 만들때 sort를 한다음 맨 처음의 값을 shift를 통해서 빼려고 했다. 하지..

알고리즘 2020.09.10

자바스크립트 이터레이터란

자바스크립트 이터레이터를 구글에 검색해 보면 다음과 같은 정의가 나온다. "이터레이터는 ECMA2015부터 반영된 자바스크립트 반복기이다." 반복기..? 반복기가 도대체 뭐지..? 뭘 돌리는 기계 같은데.. 전혀 이해가 안 갔다. 나뿐만 아니라 많은 사람들도 헷갈리는 표현이라는 생각이 들었다. 그래서 이터레이터를이터레이터를 다음과 같이 더 쉽게 표현해보고자 한다. 이터레이터를 쉽게 풀어서 한 문장으로 정의하자면, 이터레이터란,모든 순회할 수 있는 객체(대표적으로 배열, 스트링)의 원소에 하나하나에 접근할 수 있는 능력을 가진 객체이다. 다만, 개별 원소에 접근하는 방식에는 일정한 규칙을 따라야지 이터레이터이다. 여기서 말하는 일정한 규칙이란 이터레이터 프로토콜이다. 즉 접근하는 방법이 객체마다 다르지 않..

javascript 2019.10.24

자바스크립트 클로저와 호이스팅

클로저란 함수와 스코프 사이의 폐쇄적 관계이다. 좀 더 구체적으로 다음과 같이 정의해 보았다. 정의 1. 클로저란 독립된 스코프를 참조하는 함수다. 정의 2. 클로저란 내부함수에서 외부함수의 렉시컬 스코프를 참조하는 관계다. 굉장히 추상적이기에 실제코드와 사전개념을 학습해야 이해가 쉽다. 사전 개념으로서 스코프와 호이스팅을 먼저 이해해야 한다. 스코프란 스코프는 영어 뜻 그대로 범위이며, 자바스크립트는 함수레벨 스코프 var를 갖는게 특징이다. 함수레벨 스코프란 함수내에서 해당 변수의 범위가 미치는 것을 말한다. 즉, 함수내에서 var i = 10이 생성 된다면 함수 내에 중괄호가 있던 없던 어디에서든 var i 를 참조할 수 있는 것이다. 자바와 같은 언어에서는 블록레벨 스코프(중괄호 안에서 변수의 범..

javascript 2019.10.22