나는 최근에 JS를 배우기 시작했으며 이것은 기능 언어 영역으로의 첫 번째 다이빙입니다."트램펄린"방법의 차이점
functional-javascript-workshop
npm 모듈에서 "트램펄린"운동을하고 있었고 내 솔루션과 공식 솔루션의 흥미로운 차이점을 발견했습니다. 둘 다 완벽하게 잘 작동하지만, 나는 그들 사이의 실제적인 차이가 정확히 무엇인지에 관해서는 손해보고 있습니다. 나는 내 자신의 솔루션을 잘 이해하고 있지만 왜 다른 솔루션이 효과가 있는지 정확히 이해하지는 못한다.
내 솔루션
function repeat(op, num) {
var _repeat = function() {
if (num <= 0) return;
op();
return repeat(op, --num);
};
return _repeat;
}
function trampoline(f) {
while (f instanceof Function) {
f = f();
}
return f;
}
module.exports = function(op, num) {
return trampoline(repeat(op, num));
};
공식 솔루션
function repeat(operation, num) {
return function() {
if (num <= 0) return
operation()
return repeat(operation, --num)
}
}
function trampoline(fn) {
while(fn && typeof fn === 'function') {
fn = fn()
}
}
module.exports = function(operation, num) {
trampoline(function() {
return repeat(operation, num)
})
}
은 특히, 내가 마지막 부분에 대해 궁금 해요 - 왜 공식 솔루션은 annonymous 함수를 만들 않는 대신 단지 통과 repeat
? 그것은 한 fn
이 함수가 호출 그대로 반복하는 유지하는 방법
function trampoline(fn) {
while(fn && typeof fn === 'function') {
fn = fn()
}
}
주의 사항 :
코드에 차이가 있다고 생각하지 않습니다. 공식 솔루션에서 trampoline이 함수와 함께 호출된다는 것을 즉시 알 수 있습니다. 솔루션에서 반환하는 항목을 확인해야합니다. . 그리고 사이드 노트에서 javascript의 세미콜론을 피하는 것이이 공식적인 해결책에 조심해야합니다. "잘 모르겠다"라는 것을 모르는 경우 추악해질 수 있습니다. –
Hey Joel - 질문이 있습니다. 나는이 운동에 매달렸다. "fn && typeof fn ==="function "이 항상 사실이 아닐 때를 알 수 없습니다. 약간 혼란 스럽습니다. –