고차함수

이용원·2022년 11월 11일
0

JAVASCRIPT

목록 보기
12/34

고차함수

고차함수란

다른 함수와 함께 작동하거나 또는 다른 함수에서 작동하는 함수

그래서 고차함수는 다른 함수를 arguments(인수)로 가질 수 있고
함수를 리턴해줄 수 있다.


2.전달받은 인수 rollDie함수를 func파라미터에 저장
function callTwice(func){
    func(); 3. rollDie함수를 arguments로 전달받아 저정한 parameters func을 호출함
    func();

}

function callTenTimes(f, num){
    for(let i=0; i<num; i++){
        f();
    }
}

function rollDie(){
   4.callTwice함수를 호출하면 rollDie 2번 호출됨
    const roll= Math.floor(Math.random()*6)+1;
    return console.log(roll);
}
1.rollDie함수를 callTwice의 aruguments로 전달해서 callTwice함수 호출
callTwice(rollDie);



여기에서 주의할 점
함수를 호출할 때 
callTwice(rollDie());
rollDie함수를 호출해서 arguments를 전달하면
callTwice에 함수블록에서 정의한
func()가 먹지 않는다

why? 
  
callTwice의 함수에서 정의한 parmeters는 함수이기 때문에
함수블록에서 받아온 parameter를 호출하기 때문에
rollDie()를 하고 난 return값을 parmeters로 받아오기 때문에

callTenTimes(rollDie, 10);

함수 자체를 리턴할 때


function makeMysteryFunc(){

    let rand = Math.floor(Math.random()*6)+1;

    if(rand >3){

        return function(){
            console.log("축하함 좋은 함수임")
        }
    }else{
        
        return function(){
            console.log('나쁜함수임');
        }
    }
}
이렇게 함수를 리턴값으로 사용할 때는 반드시 그 리턴값에 정의한 함수를 호출해줘야한다.
makeMysteryFunc() //[Function (anonymous)]
이렇게 정의한 함수만 호출하면 함수자체를 호출하기에 리턴된 함수를 호출해줘야한다.

//그냥 바로 사용
console.log(makeMysteryFunc()());

//변수에 저장해서 사용

let mysty = makeMysteryFunc();
mysty();





//그 수가 수들 사이에 있는지 함수

방법1. 
function isBetween(num){
    return function(min, max){
        if(num>=min && num<=max){
             console.log(`${num}${min}와(과) ${max}의 사이에 있다`);
        }else{
             console.log(`${num}${min}와(과) ${max}의 사이에 없다.`);
             }
    }
}

let tenIsInclude = isBetween(10)
tenIsInclude(10, 20);

방법2. 
function isBetween2(num, min, max){
    if(num>=min && num<=max){
        console.log(`${num}${min}와(과) ${max}의 사이에 있다`);
    }else{
        console.log(`${num}${min}와(과) ${max}의 사이에 없다.`);
    }
}
isBetween2(10, 20, 30)


방법3. 
function isBetween3(min, max){
    return function(num){
        return num>=min && num<=max;
    }
}

let isStudent = isBetween3(0, 19);

console.log(isStudent(20));
console.log(isStudent(10));




0개의 댓글

관련 채용 정보