꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

JAVASCRIPT 73

호이스팅

호이스팅이란 변수나 함수를 스코프 상단으로 끌어올리는 기술입니다. console.log(a); // undefined var a = 1; 변수 선언보다 참조하는 문이 코드 순서 상 앞에 있지만, 에러가 발생하지 않고 참조 결과가 undefined로 나옵니다. 호이스팅이 일어났기 때문에 위와 같은 결과가 나옵니다. 변수 생성 단계 변수는 선언-초기화-할당, 3단계를 걸쳐 생성됩니다. 코드 실행 전 선언과 초기화가 이루어집니다. 선언 단계에서 데이터 메모리에 변수를 저장하고 초기화 단계에 undefined를 할당합니다. 그 후 코드가 실행되면서 할당하는 문에서 해당 데이터 값을 할당하게 됩니다. var 키워드로 선언된 변수와 let, const로 선언된 변수의 차이점이 있습니다. var 키워드로 선언된 변수..

this

this가 어떤 값에 바인딩 되는지는 실행 컨텍스트가 생성될 때 결정됩니다. 즉 함수를 호출할 때 결정된다 볼 수 있습니다. 그러다보니 함수를 어떻게 호출하는지에 따라 바인딩되는 값이 달라지게 됩니다. 전역 스코프에서 쓰이는 this 전역 스코프에서 쓰이는 this는 전역 객체에 바인딩 됩니다. 브라우저 환경에서는 window, node 환경에서는 global에 바인딩 됩니다. 메서드로서 호출될 때 메서드 안에 있는 this 함수와 메서드를 구분할 수 있는 것은 독립성에 있습니다. 함수의 경우 독립적으로 실행되는 반면, 메서드의 경우 자신을 호출하는 객체에 관한 동작을 수행합니다. var func = function (param) { console.log(this, x); }; func(1); var o..

원시타입과 참조타입 (Primitive type & Reference type)

자바스크립트의 데이터 타입 자바스크립트의 데이터 타입으로 7가지가 있습니다. string, number, boolean, null, undefined, symbol, object가 있으며, 데이터 타입은 원시타입과 참조타입으로 구분할 수 있습니다. string, number, boolean, null, undefined, symbol이 원시타입에 해당하며, object는 참조타입에 해당됩니다. 원시타입과 참조타입의 차이점 이 둘의 차이점을 알기 위해서는 자바스크립트에서 데이터를 어떻게 관리하고 있는지에 대한 배경지식이 있어야 합니다. var a; // 변수 a 선언 a = 1; // 변수 a에 데이터 할당 var a = 1; // 변수 선언과 할당을 한 문장으로 표현 원시타입의 경우, 자바스크립트 엔진은..

타입이란

타입 자바스크립트의 모든 값은 데이터 타입을 갖습니다. 타입이란 자바스크립트 엔진, 개발자 모두에게 어떤 값을 다른 값과 분별할 수 있는, 고유한 내부 특성의 집합입니다. 예를 들어 자바스크립트 엔진과 개발자가 10(숫자)이란 값을 '10'(문자열)이란 값과 다르게 취급한다면 두 값은 타입이 서로 다릅니다. 숫자 10은 계산을 하려는 의도지만 문자열 10은 글을 쓰는 페이지에 출력할 문자열로 쓸 의도로 만든 값입니다. 이런 타입의 특성을 제대로 파악해두어야 자바스크립트의 암묵적 타입 변환과 같은 방법을 정확히 이해할 수 있습니다. 내장 타입 자바스크립트는 7가지 내장 타입이 있습니다. 그리고 그 내장 타입은 원시타입과 객체 타입으로 나뉘어집니다. 원시 타입 undefined boolean number s..

[프로그래머스] 삼각 달팽이

function solution(n) { let a = Array(n).fill().map((_, i) => Array(i + 1).fill()) let row = -1 let col = 0 let fill = 0 for (let i = n; i > 0; i -= 3) { a[++row][col] = ++fill for (let j = 0; j < i - 1; j++) a[++row][col] = ++fill for (let j = 0; j < i - 1; j++) a[row][++col] = ++fill for (let j = 0; j < i - 2; j++) a[--row][--col] = ++fill } return a.flat() } 직각 삼각형으로 이중 배열을 만들어 풉니다.

[프로그래머스] 오픈채팅방

function solution(record) { const answer = []; const users = {}; record.forEach(str => { const [state, userId, nickname] = str.split(' '); if (str[0] === 'E') { users[userId] = nickname; answer.push([userId, '님이 들어왔습니다.']); } else if (str[0] === 'L') { answer.push([userId, '님이 나갔습니다.']); } else { users[userId] = nickname; } }); return answer.map(([userId, stateStr]) => users[userId] + stateStr); }