5-1:
함수는 하나의 자료형이기 때문에 매개변수로 전달할수 있다.
매개변수로 전달하는 함수를 콜백함수라고 한다
function callThreeTimes (callback){
for (let i=0; i<3; i++){
callback(i)
}
}
function print(i){
console.log(`${i} 번째 함수 호출`)
}
callThreeTimes(print)
//callThreeTimes() 는 print()함수를 매개변수로 받아 3번 호출한다
// callThreeTimes() 함수의 내부에는 callback(i)로 함수를 호출하고 있다.
//print() 함수가 print(0), print(1),print(2)로 차례대로 호출되어 콘솔에 찍힌다
> 0번째 함수 호출
1번째 함수 호출
2번째 함수 호출
콜백함수 코드 처리 순서가 햇갈렸고 팀원들과 토론후 내가 이해한 대로 다시 설명해보겠다.
${i}번째 함수 호출
) callback(i) 함수로 호출되어서선언적 함수와 익명 함수의 조합: 익명함수가 호출되는지 이해가 안됨
함수 = function (){
console.log('익명함수')
}
function 함수() {
console.log('선언적함수')
}
함수 ()
> 익명함수가 실행 된다
결국 호이스팅을 이해해야 하는데.. (또 나왔네?)
우선 예제 문제로만 봤을 때, 선언적 함수가 먼저 생성되고 → 컴퓨터가 코드 순으로 익명 함수를 실행하게 되는데, 익명함수와 선언적 함수의 이름이 함수()로 같기 때문에 컴퓨터는 선언적 함수가 익명 함수로 바뀐걸로 인식하고 익명함수의 콘솔을 실행한다.
프로그래머스 문제 :
https://school.programmers.co.kr/learn/courses/30/lessons/120899
//내 해결 방법
function solution (array) {
let output = array[0];
for (const item of array){
if (output < item){
output =item
}
}
return [output,array.indexOf(output)]
}
const arrayExample= [1,8,3]
console.log(solution(arrayExample))
>[8,1] // 8은 최대값, 1은 최대값의 인덱스
// math 메소드 사용하여 max 값 구하는 방법
function solution2(array) {
let max = Math.max(...array);
return [max, array.indexOf(max)];
}
console.log(solution2([1, 2, 3, 4]))