개요
함수 선연식 (Function declaration)
일반적인 프로그래밍 언어의 함수 정의 방식
예시
함수 표현식 (Function expression)
표현식 내에서 함수를 정의하는 방식
함수 표현식은 함수의 이름을 생략한 익명 함수로 정의 가능
예시
표현식에서 함수 이름을 명시하는 것도 가능
다만 이 경우 함수 이흠은 호출에 사용 되지 못하고 디버깅 용도로 사용됨
기본 인자(Default arguments)
매개변수보다 인자의 개수 불일치 허용
매개변수보다 인자의 개수가 많을 경우
매개변수보다 인자의 개수가 적을 경우
-> parameter가 적든 많든 error가 안남
Spread syntax(...)
배열과의 사용 (배열 복사)
함수와의 사용 (Rest parameters)
함수의 타입
호이스팅-선언식
호이스팅-표현식
선언식과 표현식 정리
화살표 함수 (Arrow Function)
화살표 함수 예시
화살표 함수 응용
this
어떠한 object를 가리키는 키워드
javascript의 함수는 호출될 때 this를 암묵적으로 전달받음
JavaScript에서의 this는 일반적인 프로그래밍 언어에서의 this와 조금 다르게 동작
JavaScript는 해당 함수 호출 방식에 따라 this에 바인딩 되는 객체가 달라짐
즉, 함수를 선언할 때 this에 객체가 결정되는 것이 아니고, 함수를 호출할 때 함수가 어떻게 호출되었는지에 따라 동적으로 결정됨
this INDEX
전역 문맥에서의 this
함수 문맥에서의 this
단순 호출
Method(Function in Object, 객체의 메서드로서)
Nested(Function 키워드)
화살표 함수
화살표 함수는 호출의 위치와 상관없이 상위 스코프를 가리킴 (Lexical scope this)
Lexical scope
함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정
Static scope라고도 하며 대부분의 프로그래밍 언어에서 따르는 방식
따라서 함수 내의 함수 상황에서 화살표 함수를 쓰는 것을 권장
this 정리
이렇게 this가 런타임에 결정되면 장점도 있고 단점도 있음
함수(메서드)를 하나만 만들어 여러 객체에서 재사용할 수 있다는 것은 장점이지만, 이런 유연함이 실수로 이어질 수 있다는 것은 단점
JavaScript가 this를 다루는 방식이 좋은지, 나쁜지는 우리가 판단할 문제가 아님
중요한 것은 개발자는 this의 동작 방식을 충분히 이해하고 장점을 취하면서 실수를 피하는 데만 집중하면 됨
개요
JavaScript의 데이터 타입 중 참조 타입(reference)에 해당하는 타입은 Array와 Object이며, 객체라고도 말함
객체는 속성들의 모음
array.push()
array.pop()
array.includes(value)
array.indexOf(value)
배열에 특정 값이 존재하는지 확인 후 가장 첫번째로 찾은 요소의 인덱스 반환
만약 해당 값이 없을 경우 -1 반환
Array Helper Methods
콜백 함수란?
콜백 함수 예시
python의 map에 square 함수를 인자로 넘겨 numbers 배열의 각 요소 square 함수의 인자로 사용하였음
forEach 메서드에 callBackFunc 함수를 인자로 넘겨 numbers 배열의 각 요소를 callBackFunc 함수의 인자로 사용하였음
Array Helper Methods - forEach
array.forEach(callback(element[, index[, array]]))
인자로 주어지는 함수(콜백 함수)를 배열의 각 요소에 대해 한 번씩 실행
콜백 함수는 3가지 매개변수로 구성
반환 값(return) 없음
Array Helper Methods - forEach
Array Helper Methods - map
array.map(callback(element[, index[, array]]))
배열의 각 요소에 대해 콜백 함수를 한번씩 실행
콜백 함수의 반환 값을 요소로 하는 새로운 배열 반환
== forEach + return 느낌
기존 배열 전체를 다른 형태로 바꿀 때 유용
Array Helper Methods - filter
array.filter(callback(element[, index[, array]]))
배열의 각 요소에 대해 콜백 함수를 한번씩 실행
콜백 함수의 반환 값이 true인 요소들만 모아서 새로운 배열 반환
기존 배열의 요소들을 필터링할 때 유용
Array Helper Methods - reduce
array.reduce(callback(element[, index[, array]])[, initialValue])
콜백함수를 배열의 각 요소에 대해 한 번씩 실행해서, 하나의 결과 값을 반환
즉, 배열을 하나의 값으로 계산하는 동작이 필요할 때 사용(총합, 평균 등)
map, filter 등 여러 배열 메서드 동작을 대부분 대체할 수 있음
Array Helper Methods - find
array.find(callback(element[, index[, array]]))
배열의 각 요소에 대해 콜백 함수를 한 번씩 실행
콜백 함수의 반환 값이 ture면, 조건을 만족하는 첫번째 요소를 반환
찾는 값이 배열에 없으면 undefined 반환
Array Helper Methods - some
array.some(callback(element[, index[, array]]))
배열의 요소 중 하나라도 주어진 판별 함수를 통과하면 ture 반환
모든 요소가 통과하지 못하면 거짓 반환
빈 배열은 항상 false
Array Helper Methods - every
array.every(callback(element[, index[, array]]))
배열의 모든 요소가 주어진 판별 함수를 통과하면 true 반환
하나의 요소라도 통과하지 못하면 false 반환
빈 배열은 항상 true 반환
배열 순회 비교
개요
객체는 속성의 집합이며, 중괄호 내부에 key와 value의 쌍으로 표현
key
value
객체 요소 접근
객체 예시
[참고] 생성자 함수
- JS에서 객체를 하나 생성한다고 한다면?
- 하나의 객체를 선언하여 생성
- 동일한 형태의 객체를 또 만든다면?
- 또 다른 객체를 선언하여 생성
- 동일한 구조의 객체를 여러 개 만들고 싶다면?
- 생성자 함수는 특병한 함수를 의미하는 것이 아님
- new연산자로 사용하는 함수
- 함수 이름은 반드시 대문자로 시작
- 생성자 함수를 사용할 때는 반드시 new 연산자를 사용
1. 속성명 축약
객체를 정의할 때 key와 할당하는 변수의 이름이 같으면 예시와 같이 축약 가능
2. 메서드명 축약
메서드 선언 시 function 키워드 생략 가능
3. 계산된 속성 (computed property name)
객체를 정의할 때 key의 이름을 표현식을 이용하여 동적으로 생성 가능
4. 구조 분해 할당 (destructing assignment)
배열 또는 객체를 분해하여 속성을 변수에 쉽게 할당할 수 있는 문법
5. Spread syntax
배열과 마찬가지로 전개구문을 사용해 객체 내부에서 객체 전개 가능
얕은 복사에 활용가능
JSON
JSON 변환
[참고] 배열은 객체다
- 배열은 키와 속성들을 담고 있는 참조 타입의 객체
- 배열은 인덱스를 키로 가지며 length 프로퍼티를 갖는 특수한 객체