1
내가 이렇게 행동하는 이유를 모르는 이상 여전히 코드로 연주 된

: 고차 함수 호출 이상한 행동

function myforEach(arr, func){ 
    for(var i=0; i<arr.length; i++){ 
    func(); 
    } 
} 
var arr = [1,2,3]; 

function func2(){ 
return 3+3; 
} 

myforEach(arr, func2); // undefined 

내가 두 개의 인수 배열과 소요 myforEach 함수를 생성 함수는 for 루프 내에서 아래에 3 번 호출되는 인수 func로 전달됩니다. 그런 다음 3 + 3을 더하는 값을 반환하는 다른 함수 func2를 선언합니다. 그런 다음 두 개의 인수를 사용하여 myforEach을 실행하고 콘솔에서 3 번 값 6을 인쇄 할 것을 기대합니다. 그러나 반환되는 것은 정의되지 않았습니다.

function func2(){ 
console.log(3+3); 
} 

그리고 난 콘솔은 6 세 번 기록 얻을 다시 실행 :

내가 FUNC2 문에 변경

. 내가 괄호 function func2(){alert;} // undefined없이 FUNC2 내 경고를 넣어하려고하지만 괄호 function func2(){alert();}를 추가 할 때 다음 세 번

경고 경우 myforEach(arr, alert); // (3)alert 취해야 할

function func2(){ 
console.log("hi"); 
} 

myforEach(arr, func2); // (3)hi 

: myforEach(arr, func2); // (3)6

그럼 내가 다시에 FUNC2 문을 변경 그래서 질문은 function func2(){return 3+3;}가 6 번을 3 번 반환하지 않는 이유는 무엇입니까? for 루프 내에서 func()는 괄호 안에 있기 때문에 추가 된 모든 함수가 호출됩니다. func2가 제대로 호출되지 않는 이유는 무엇입니까?

나는 stackoverflow에 대한 연구를했지만, 내가 얻을 수있는 것은 잃어버린 것이지만 이유와 근본 원인에 대한 자세한 설명은 없다.

여기에 늦었고 뭔가 빠지거나 너무 졸 았는지 알 수 없습니다. 어떤 설명이 도움이 될 것입니다. 고마워요 :)

답변

2

그래서 함수 func2() {return 3 + 3;}가 6을 3 번 반환하지 않는 이유는 무엇입니까?

  — 그 반환 값으로는 아무 것도하지 않을 것입니다. 그런 다음 myforEachfunc2을 전달하고 func로 수신 만있어 :

function myforEach(arr, func){ 
    for(var i=0; i<arr.length; i++){ 
    func(); // <=== You're not using the return value for anything 
    } 
} 

은 그냥 값을 반환하면 자동으로 어디서나 출력 할 발생하지 않습니다. 이의 경우 될 것이라고

참고 내장 forEach뿐만 아니라 :

console.log("Nothing gets output after this message"); 
 
var arr = [1,2,3]; 
 
function func2(){ 
 
return 3+3; 
 
} 
 
arr.forEach(func2);

forEach 그것은 함수의 반환 값 아무것도하지 않습니다, 의도적으로 개성이다 너는 그것을 준다. 그것은 어디서나 기억하지 않습니다 (즉, map), 출력, 다른 사람과 합산하십시오 (즉, reduce). myforEach도 비슷합니다.

+0

이 될 것입니다.하지만 func2 내부에서 3 + 3이 반환되므로 값이 콘솔에서 출력 될 것으로 예상했지만 잘못된 것 같습니다. func()가 3 번 호출되기 때문에 루프 내에서 func()에 반환 값을 추가하는 것이 6 번 3 번 출력되는지 궁금합니다. 그러나 콘솔에서 단 6 번 출력하는 것입니다. 왜 어떤 이유가 있습니까? @ T.J. Crowder 님, 감사합니다. :) – Alonso

+0

@AlonsoAhmetaj : 명시 적 반환 값을 설정하지 않은 함수를 호출하기 때문에 사용자가 입력 한 가장 바깥 쪽 표현식의 결과를 제외하고 콘솔에 자동으로 출력되는 것은 없습니다 ('undefined').). 'return func(); '으로 변경하면 첫 번째 루프 반복에서 myforEach가 종료되므로 한 번만 6 번만 볼 수 있습니다. –

+0

그래서 공유하는 것을 신경 쓰지 않는다면 3 번 출력하는 적절한 방법은 무엇일까요? 나는 console.log를 사용했는데 일했지만 생각은 그 값을 세 번 돌려주는 또 다른 방법 일 것입니다. 변수에 추가 할 수도 있습니다. 감사! – Alonso

0

이 함수는 예상대로 6을 반환합니다. 그 반환 값을 포함하는 방법이 필요합니다. 임의의 변수에 func2() 호출을 할당하면 해당 값은 6