자기 자신을 호출(재귀 호출)하는 함수
반복되는 처리를 위해 사용한다.
재귀 함수 중에 외워둬야 할 3가지
function factorial(n){
if(n <= 1) {
return n
}
return n * factorial(n-1)
}
// factorial(5) == 5 * factorial(4) == 5 * 24
// factorial(4) == 4 * factorial(3) == 4 * 6
// factorial(3) == 3 * factorial(2) == 3 * 2
// factorial(2) == 2 * factorial(1) == 2 * 1
// factorial(1) == 1
function reverse(text) {
text += ''
if(text.length <= 1) {
return text
}
return reverse(text.slice(1)) + text[0]
}
// reverse('hello') == reverse('ello') + 'h' == 'olle' + 'h'
// reverse('ello') == reverse('llo') + 'e' == 'oll' + 'e'
// reverse('llo') == reverse('lo') + 'l' == 'ol' + 'l'
// reverse('lo') == reverse('o') + 'l' == 'o' + 'l'
// reverse('o') == 'o'
// 1, 1, 2, 3, 5, 8, 13, 21
function fib(n){
if(n <= 2) {
return n
}
return fib(n-1) + fib(n-2)
}
// 왼쪽 function만 따라갔으니
// fib(4) == fib(3) + fib(2)
// fib(3) == fib(2) + fib(1) == 3
// fib(2) == 2
// fib(1) == 1
// 오른쪽 값인 fib(2)를 다시 해야하는 상황!!
// fib(2) == 2
함수의 정의와 동시에 실행되는 함수.
최초 한번만 호출되며 다시 호출할 수는 없다.
목적
let arr = [1, 2, 3, 4, 5];
let 맵 = arr.map(el => el * 2);
arr // 기존 배열
> (5) [1, 2, 3, 4, 5]
맵 // 기존 배열에 function 실행하여 만든 새로운 배열
> (5) [2, 4, 6, 8, 10]
let data = [[1, 2, 3],[4, 5, 6], [7, 8, 9]]
let newData = data.map(a => a.map(n => n *2));
data
> (3) [Array(3), Array(3), Array(3)]
0: (3) [1, 2, 3]
1: (3) [4, 5, 6]
2: (3) [7, 8, 9]
newData
> (3) [Array(3), Array(3), Array(3)]
0: (3) [2, 4, 6]
1: (3) [8, 10, 12]
2: (3) [14, 16, 18]
// 매핑을 한번만 하면 1차원 배열의 요소에만 function이 실행된다
// [1, 2, 3] * 2, [4, 5, 6] * 2, [7, 8, 9] * 2
let newData2 = data.map(a => a * 2);
newData2
> (3) [NaN, NaN, NaN]
0: NaN
1: NaN
2: NaN
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
result
> (3) ['exuberant', 'destruction', 'present']
let 회원정보 = [{
아이디 : 'jjang',
패스워드 : '5dbfbded05f34de754e8f265448be17934580556b488c0461fd12d211a87aaa5',
성별 : '남',
휴대폰번호 : '010-5004-0000',
이메일 : 'hojun1@gmail.com',
가입연도 : '2021-12-02',
주접속위치 : '125.242.161.149'
}, {
아이디 : 'jjang2',
패스워드 : '5dbfbded05f34de754e8f265448be17934580556b488c0461fd12d211a87aaa5',
성별 : '남',
휴대폰번호 : '010-5004-0000',
이메일 : 'hojun2@gmail.com',
가입연도 : '2021-12-02',
주접속위치 : '125.242.161.149'
}, {
아이디 : 'jjang3',
패스워드 : '5dbfbded05f34de754e8f265448be17934580556b488c0461fd12d211a87aaa5',
성별 : '여',
휴대폰번호 : '010-5004-0000',
이메일 : 'hojun3@gmail.com',
가입연도 : '2021-12-02',
주접속위치 : '125.242.161.149'
}, {
아이디 : 'jjang4',
패스워드 : '5dbfbded05f34de754e8f265448be17934580556b488c0461fd12d211a87aaa5',
성별 : '여',
휴대폰번호 : '010-5004-0000',
이메일 : 'hojun4@gmail.com',
가입연도 : '2021-12-02',
주접속위치 : '125.242.161.149'
}];
회원정보.filter(el => el.성별 === '남');
회원정보.filter(el => el.성별 === "남" && el.가입연도.split('-')[0] === '2021');
회원정보.find(el => el.아이디 === "jjang");
↳ filter는 조건에 맞는 걸 다 찾는다. find는 한번 찾으면 멈춰서 메모리 효율이 더 좋다. 고유값을 찾을 때는 find가 낫다.
자바스크립트에서는 call by value만 존재한다.
주소가 넘어가는 것이 아니라 주소값을 복사한 복사본이 넘어간다.
해당되는 자료형은 객체, 배열, 함수.
let x = [100, 200, 300];
function test(a) {
a[0] = 10000;
}
test(x)
x
> [10000, 200, 300]