2017-03-15 7 views
2

우선 내가 올바른 장소에 게시하지 않거나 이미 중복 된 항목이있는 경우 미안하지만이 항목을 호출하거나 검색하는 방법을 알지 못합니다.자바 스크립트 -이 고차 함수의 의미

function noisy(f) { 
    return function(arg) { 
    console.log("calling with", arg); 
    var val = f(arg); 
    console.log("called with", arg, "- got", val); 
    return val; 
    }; 
} 
noisy(Boolean)(0); 
// → calling with 0 
// → called with 0 - got false 

가 왜 함수 호출 후 (부울)를 가지고해야합니까 :

사람은 다음과 같은 코드가 의미하는 무엇을 나에게 설명해 주시겠습니까?

noisy(Boolean)(0); 

이 함수 호출은 무엇이라고합니까?

미리 감사드립니다.

+1

* "왜 내가 함수 호출 후 (부울)가 필요합니까"* 그것은 * 후 * 함수 호출이 아니다 : 여기에 StackOverflow에서 환상적인 대답이다. 'noisy (Boolean)'*는 함수 호출입니다. 당신은 인자로'Boolean'을 전달하는'noisy'를 호출하고 있습니다. –

답변

5

이것은 까다로운 작업입니다. (Boolean)가 여기에서 벗어날 수는 있지만 실제로는 오래된 매개 변수 일뿐입니다. BooleandoStuff과 같은 모든 기능으로 바꿀 수 있으며 여전히 작동합니다.

네가 지적했듯이, 이것은 중복되는 질문입니다. 당신은 "폐쇄 (closure)"라고 불리는 것을보고 있습니다.

How do JavaScript closures work?

+0

답변을 주셔서 감사합니다. 제게 많은 도움이되었습니다. 여전히 폐쇄적 인 상황에서 여전히 좋은 점은 발견하지 못했습니다. –

+0

게시 한 링크를 읽은 후 예제 6이 실제로 내 의심을 설명합니다. 정말 고마워요! –

+1

당신을 진심으로 환영합니다! 실제로 나는 또한 당신이 실제로 당신의 예제에서 [고차 함수] (https://en.wikipedia.org/wiki/Higher-order_function) (간단한 정의를위한 링크 참조)를 다루고 있음을 분명히해야합니다. 고차원 함수의 예는 [콜백 함수] (http://www.learn-js.org/en/Callbacks)입니다 (간단한 설명은 link 참조). –

2

"noisy"는 호출 할 때 함수를 반환하는 함수입니다.

Boolean을 함수에 전달하면 Boolean(0)과 같이 Boolean이 호출되어 0이 위선 값이므로 false이됩니다.

Boolean은 부울 값을 만들거나 모든 값을 부울 값으로 변환하는 데 사용할 수있는 생성자입니다.

1

f을 전달해야합니다. Boolean 기능 이외의 다른 것일 수 있습니다. 원래 코드에서

const increment = x => x+1; 
const noisyInc = noisy(increment); 
console.log(noisyInc(1)); 

을 시도, 중간 변수는 생략 - 내가 여기 noisy(increment)(1)를 작성했습니다 수있는 것처럼.

+0

가치있는 일이라면 무엇이든 될 수 있습니다. 'Boolean'을 사용하면 '부울'은 'new'없이 값을 사용할 때 (캐스트) 값을 부울 (변환)으로 변환하기 때문에 작동합니다. – towerofnix

+0

@towerofnix 예, 그게 '불리언'이하는 일입니다. – Bergi

2

noisy(...) 함수를 호출하면 매개 변수의 정보를 사용하여 구성하는 다른 함수가 반환됩니다. 함수 호출noisy(Boolean)(0); 실제로이 함수를 호출하고 (어쩌면한다)과 같이 쓸 수있다 :

var noisyFunction = noisy(Boolean) 
noisyFunction(0) 

noisy() 함수를 취한다는 사실을 (Boolean 함수 MDN입니다). 여기에 사용되는 구문에 실제 효과가 없다면 아무런 인자도 없거나 무언가를 사용할 수 없습니다.

higher-order-functions 태그를 실제로 선택하면 실제로 분류됩니다. 이것은 그것들을 프로그래밍하는 예제입니다. noisy이 반환 된 후에 f 값이 noisyFunction에 사용 가능하다는 사실은 종료 결과입니다 (MDN). 어떤 프로그래머는 이것을 "클로저 (closure) 사용"이라고 설명 할 수도 있지만, 표시된 패턴에만 국한되지는 않습니다.

+0

답변을 주셔서 감사합니다. 다른 답변과 비슷하게 여러 가지 방법으로 같은 함수를 호출 할 수 있다고 설명해 주셔서 감사합니다. 지금은 실제로 사용했던 클로저 유형과 비슷합니다. –