고차함수란
다른 함수와 함께 작동하거나 또는 다른 함수에서 작동하는 함수
그래서 고차함수는 다른 함수를 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));