변수를 선언한다는 것은 데이터 보관함(메모리)에 데이터를 넣을 공간을 확보하는 것을 의미한다.
이떄, 변수란 각 데이터 보관함(메모리)에 붙인 이름을 의미하며 보관함의 크기는 동일하다.
변수를 선언하고 할당하는 가장 큰 이유는 반복적으로 사용하는 값을 데이터 보관함에 넣어 두었다가 편하게 꺼내서 사용하기 위함이다.
let age // let 키워드로 변수 age 선언 (선언은 한번만 한다!)
age = 25 // age 변수에 값 할당
let fruit = "딸기";
// let 키워드로 변수 fruit을 선언하고 문자열 "딸기"를 할당한다.
// 여기서 등호(=)는 '같다'라는 의미가 아닌 '할당하다'의 의미이다.
let sum = 1;
sum = sum + 2; // 1 + 2 (재할당)
sum = sum + 3; // 3 + 3 (재할당)
sum = sum + 4; // 6 + 4 (재할당)
console.log(sum); // 10
변수에는 숫자, 문자열, 불리언, 배열 객체 등 다양한 타입이 있다. (undefined, 함수도 타입이다.)
typeof 연산자를 사용하면 값의 타입을 알 수 있다.
let int = '0124';
console.log(typeof int); // 변수 int의 타입은 string(문자열)이다. ('',"",``)
let hello;
console.log(hello); // undefined (변수에 할당된 값이 없기 때문)
console.log(typeof 1); // number
console.log(typeof '1'); // string
console.log(typeof (1 < 2)); // boolean (true)
"작은 기능의 단위"로 어떤 목적을 가진 작업들을 수행하는 코드들이 모인 블록이다. 일련의 코드를 묶어서 저장한 후 필요할 때마다 호출할 수 있으며 함수는 반드시 return 된다. 또한 함수에는 구체적인 입력값과 출력값이 존재한다.
const base = 3;
const height = 4;
const triangleArea = (base*height) / 2;
console.log(triangleArea) // 6
// 이렇게 반복적으로 실행되는 일이 필요한 경우 함수로 만들 수 있다.
// 함수 선언식, 함수 표현식, 화살표 함수로 함수를 선언할 수 있다.
// 1. 함수 선언식
function getTriangleArea(base, height) {
let triangleArea = (base * height) / 2;
return triangleArea;
}
// 2. 함수 표현식
const getTriangleArea = function (base, height) { // 변수에 익명 함수 할당
let triangleArea = (base * height) / 2;
return triangleArea;
}
// 3. 화살표 함수
const getTriangleArea = (base, height) => {
let triangleArea = (base * height) / 2;
return triangleArea;
}
// 만약 함수의 body에 return문만 있는 경우, 화살표 함수는 return과 중괄호({})를 생략할 수 있다.
const getTriangleArea = (base, height) => base * height / 2; // (O)
// return 문에서 소괄호를 사용할 수 있다
const getTriangleArea = (base, height) => (base * height / 2) // (O)
const getTriangleArea = (base, height) => {base * height / 2} // (X), undefined
// 만약 함수 내 현식이 2줄 이상인 경우, return과 중괄호({})를 명시적으로 쓰는 것이 좋다.
// Bad
const getStudentAvg = arr => arr.filter(person => person.job === 'student').reduce((sum, person) => (sum + person.grade), 0)
// Good
const getStudentAvg = arr => {
return arr
.filter(person => person.job === 'student')
.reduce((sum, person) => (sum + person.grage), 0)
}
filter(), reduce() MDN에서 찾아보기
filter()
메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환한다.
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result) // ["exuberant", "destruction", "present"]
arr.filter(callback(element[, index[, array]])[, thisArg])
매개변수
element
: 처리할 현재 요소index
: 처리할 현재 요소의 인덱스array
: filter를 호출한 배열thisArg
: callback을 실행할 때 this로 사용하는 값테스트를 통과한 요소로 이루어진 새로운 배열을 반환하고 어떤 요소도 테스트를 통과하지 못했으면 빈 배열을 반환한다.
( 출처 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter )
reduce()
메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환한다.
const array1 = [1, 2, 3, 4];
// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
(previousValue, currentValue) => previousValue + currentValue,
initialValue
);
console.log(sumWithInitial); // 10
리듀서 함수는 네 개의 인자를 가진다.
1. 누산기 (acc)
2. 현재 값 (cur)
3. 현재 인덱스 (idx)
4. 원본 배열 (src)
리듀서 함수의 반환 값은 누산기에 할당되고, 누산기는 순회 중 유지되므로 결국 최종 결과는 하나의 값이 된다.
arr.reduce(callback[, initialValue])
매개변수
callback
: 배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수를 받는다.
accumulator
: 누산기는 콜백의 반환값을 누적한다. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue
를 제공한 경우에는 initialValue
의 값이다.
currentValue
: 처리할 현재 요소
currentIndex
: 처리할 현재 요소의 인덱스. initialValue
를 제공한 경우 0, 아니면 1부터 시작한다.
array
: reduce()를 호출한 배열
initialValue
: callback
의 최초 호출에서 첫 번째 인수에 제공하는 값. 초기값을 제공하지 ㅇ낳으면 배열의 첫 번째 요소를 사용한다. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생한다.
누적 계산의 결과 값을 반환한다.
( 출처 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce )