https://www.c0d3.com/curriculum/js1/recursion_closure_and_async
함수의 이해를 최대한으로 해보고자
아래의 문제를 풀이해본다.
위의 링크에서 전문을 확인할 수 있다.
문제 1
아래의 함수를 보고, callWith 함수를 작성해라.
callWith 함수는 숫자를 인수로 받고, 함수를 리턴한다.
const fun = callWith(10)
let b = fun(num => {
return num + 5
}) // b is 15
b = fun(num => {
return num + 'hello'
}) // b is "10hello"
b = fun(num => {
return 500 % num
}) // b is 0
팁)
함수를 거꾸로부터 읽어가다보면 어떤 파라미터를 이용해 함수를 만들지 생각해볼 수 있다.
정답
const callWith = (num) => {
return (f) => {
return f(num)
}
}
풀이)
함수가 선언되면 함수가 선언된 변수에 return 이후의 값이 전달되므로,
아래에서부터 거슬러 올라가면 어떤 인수와 파라미터가 필요한 지 확인할 수 있다.
let b는 fun(함수) 형태 구성으로 되어있고.
fun은 callWith(숫자) 형태로 구성되어 있다.
따라서 callWith는 첫 인수로 숫자를 받고
리턴값은 함수 형태를 띄어야 한다.
자바스크립트에서 함수의 형태는 () => {} 이다.
문제2
아래의 코드를 보고 runIt 함수를 작성해보자.
runIt 함수는 함수를 파라미터로 하고, 함수를 리턴한다.
const subtract = runIt((a, b) => {
return a - b
})
let b = subtract(3, 20) // b is -17
b = subtract(11, 2) // b is 9
팁)
함수를 거꾸로부터 읽어가다보면 어떤 파라미터를 이용해 함수를 만들지 생각해볼 수 있다.
정답
const runIt = (f) => {
return (a, b) => {
return f(a, b)
}
풀이)
subtrack은 숫자 2개를 인수로 받는다.
subtrack은 함수를 인수로 가지는 runIt 이 선언되었다.
따라서 숫자 2개를 인수로 받는 리턴 (a, b) 을 고려하고, 인수로 받은 함수에
인수로 받은 숫자를 연결시켜 문제를 해결한다.
'Javascript' 카테고리의 다른 글
(자바스크립트) 문자열 (0) | 2022.08.02 |
---|---|
고찰 (조건식에 boolean 값을 넣었을 때) (0) | 2022.08.02 |
(자바스크립트) 클로저(Closure) (0) | 2022.07.31 |
innerHTML 연습 1 (0) | 2022.07.26 |
(JS) 객체 지향 프로그래밍 : 생성자 함수와 프로토타입 비교 (0) | 2022.06.24 |