오늘 한 것
이진 검색 구현
1 | function binarySearch(array, target) { |
- 시간 복잡도: O(log n)
- 좀 더 간결하게 코드를 정리해보자. 이왕이면 재귀함수로도 구현해보자
함수
매개변수의 최대 개수
매개변수의 개수가 많아진다면 매개변수에 객체로 전달하는 것이 좋다. → 객체는 프로퍼티 키를 통해 접근하니 순서가 상관없다. → 단점으로는 객체는 변경 가능한 값이라 불안정할 수 있다.
반환문
1 | function add(x, y) { |
참조에 의한 전달과 외부 상태의 변경
1 | // 매개변수 primitive는 원시값을 전달받고, 매개변수 obj는 객체를 전달받는다. |
1 | // 매개변수 primitive는 원시값을 전달받고, 매개변수 obj는 객체를 전달받는다. |
즉시 실행 함수
즉시 실행 함수(IIFE)
1 | // 익명 즉시 실행 함수 |
- let, const 등장 전 전역변수 방지를 위한 스코프 역할로 사용했다.
- 클로저(closure)와 관련되어 사용한다.
즉시 실행 함수를 여러번 사용할 경우 → 즉시 실행 함수를 쓸 이유가 없다.
재귀 함수
재귀함수는 StackOverFlow 에러에 취약하다. for문과의 가독성 등을 잘 비교해서 더 나은 경우에만 쓰는 것이 좋다.
많이 쓰이지는 않지만 트리 탐색 및 깊은 복사할 때 사용된다.
중첩 함수
JS에서 중요한 개념이다.
전역 스코프에서 함수가 실행될 때 runtime 이전에 함수 스코프를 평가한다. 이때 변수, 내부 함수 등이 호이스팅된다.
외부 함수 내부에 중첩된 함수는 외부 함수라는 스코프에 한정된 함수라는 것이다.
콜백 함수
1 | // 고차함수 |
고차함수: 인수로 함수를 받거나 리턴값으로 함수를 반환하는 함수
콜백함수: 매개변수를 통해 다른 함수 내부로 전달되는 함수
순수 함수와 비순수 함수
객체의 메서드는 프로퍼티를 잠조하고 조작하기 때문에 기본적으로 비순수 함수이다.
함수형 프로그램의 이상향은 순수 함수만을 사용하며 코딩하는 것이다.