# 크롬으로 디버깅 하는 방법
-
Watch
– 표현식을 평가하고 결과를 보여줍니다.Add Expression 버튼
+
를 클릭해 원하는 표현식을 입력한 후 Enter를 누르면 중단 시점의 값을 보여줍니다. 입력한 표현식은 실행 과정 중에 계속해서 재평가됩니다. -
Call Stack
– 코드를 해당 중단점으로 안내한 실행 경로를 역순으로 표시합니다.실행은
index.html
안에서hello()
를 호출하는 과정 중에 멈췄습니다. 함수hello
내에 중단점을 설정했기 때문에, 콜 스택(Call Stack) 최상단엔hello
가 위치합니다.index.html
에서 함수hello
를 정의하지 않았기 때문에 콜 스택 하단엔 'anonymous’가 출력됩니다.콜 스택 내의 항목을 클릭하면 디버거가 해당 코드로 휙 움직이고, 변수 역시 재평가됩니다. 'anonymous’를 클릭해 직접 확인해 봅시다.
-
Scope
– 현재 정의된 모든 변수를 출력합니다.Local
은 함수의 지역변수를 보여줍니다. 지역 변수 정보는 소스 코드 영역에서도 확인(강조 표시)할 수 있습니다.Global
은 함수 바깥에 정의된 전역 변수를 보여줍니다.Local
하위 항목으로this
에 대한 정보도 출력되는데, 이에 대해선 추후에 학습하도록 하겠습니다.
# 코드 스타일
// 중괄호
if (n < 0) {
alert(`Power ${n} is not supported`);
}
// 백틱(`)을 사용하면 문자열을 여러 줄로 쉽게 나눌 수 있습니다.
let str = `
ECMA International's TC39 is a group of JavaScript developers,
implementers, academics, and more, collaborating with the community
to maintain and evolve the definition of JavaScript.
`;
if (
id === 123 &&
moonPhase === 'Waning Gibbous' &&
zodiacSign === 'Libra'
) {
letTheSorceryBegin();
}
들여쓰기
가로 들여쓰기 - 스페이스 2개 혹은 4개 / 탭
세로 들여쓰기 - 변수 선언, 반복문, 리턴문 사이
function pow(x, n) {
let result = 1;
// <--
for (let i = 0; i < n; i++) {
result *= x;
}
// <--
return result;
}
세미콜론
자바스크립트 엔진에 의해 무시되더라도 모든 구문의 끝에 세미콜론 써주는 습관!!
중첩
for (let i = 0; i < 10; i++) {
if (cond) {
... // <- 중첩 레벨이 하나 더 늘어났습니다.
}
}
// continue써서 아래처럼 하기
for (let i = 0; i < 10; i++) {
if (!cond) continue;
... // <- 추가 중첩 레벨이 추가되지 않습니다.
}
// return; 으로 끝내줘서 else 쓰지 않기
function pow(x, n) {
if (n < 0) {
alert("'n'은 음수가 될 수 없습니다.");
return;
}
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
함수 위치
방법 1) 헬퍼 함수 먼저 → 사용하려는 코드
function walkAround() {
...
}
// 헬퍼 함수를 사용하는 코드
let elem = createElement();
setHandler(elem);
walkAround();
방법 2) 사용하려는 코드 먼저 → 헬퍼 함수 (보통 이게 선호. 눈으로 읽는 순이기 때문에)
// 헬퍼 함수를 사용하는 코드
let elem = createElement();
setHandler(elem);
walkAround();
// --- 헬퍼 함수 ---
function createElement() {
...
}
유명 스타일 가이드:
Linter 사용하기
ESLint 사용해서 자동으로 체크하면서 버그 예방.
# 주석
-주석을 쓰기보다는 함수 자체가 이를 설명할 수 있도록 함수로 나눠라.
-보통 설명을 많이 쓰면 좋지 않다.
-아키텍쳐나 매개변수 정보를 담고 있는 주석은 좋다.
/**
* x를 n번 곱한 수를 반환함
*
* @param {number} x 거듭제곱할 숫자
* @param {number} n 곱할 횟수, 반드시 자연수여야 함
* @return {number} x의 n 거듭제곱을 반환함
*/
function pow(x, n) {
...
}
-왜 이런 방법으로 해결하였는지를 설명하는 주석 O (나중에 실수 방지)
주석에 들어가면 좋은 내용
- 고차원 수준 아키텍처
- 함수 용례
- 당장 봐선 명확해 보이지 않는 해결 방법에 대한 설명
주석에 들어가면 좋지 않은 내용
- '코드가 어떻게 동작하는지’와 '코드가 무엇을 하는지’에 대한 설명
- 코드를 간결하게 짤 수 없는 상황이나 코드 자체만으로도 어떤 일을 하는지 충분히 판단할 수 없는 경우에만 주석을 넣으세요.
주석은 JSDoc3 같은 자동 문서생성 도구에도 쓰입니다. 자동 문서생성 도구는 주석을 이용해 HTML 등의 포맷을 가진 문서를 자동으로 만들어줍니다.
테스트
Behavior Driven Development (BDD)
테스트 + 문서 + 예시를 한데 모아놓은 개념이다.
describe("pow", function() {
it("주어진 숫자의 n 제곱", function() {
assert.equal(pow(2, 3), 8);
});
});
describe("title", function() { ... })
구현하고자 하는 기능에 대한 설명이 들어갑니다. 우리 예시에선 함수 pow
가 어떤 동작을 하는지에 대한 설명이 들어갈 겁니다. it
블록을 한데 모아주는 역할도 합니다.
it("유스 케이스 설명", function() { ... })
it
의 첫 번째 인수엔 특정 유스 케이스에 대한 설명이 들어갑니다. 이 설명은 누구나 읽을 수 있고 이해할 수 있는 자연어로 적어줍니다. 두 번째 인수엔 유스 케이스 테스트 함수가 들어갑니다.
assert.equal(value1, value2)
기능을 제대로 구현했다면 it
블록 내의 코드 assert.equal(value1, value2)
이 에러 없이 실행됩니다.
'Web > JavaScript' 카테고리의 다른 글
#2 JavaScript 코어 기본 정리. (0) | 2020.12.27 |
---|---|
JS#1. Json 파일 fetch로 동적으로 받아오고 화면에 출력하기 (0) | 2020.08.24 |