2014-12-19 9 views
1

그래서 나는 Ellquent JavaScript 연습의 일부로 "every"메서드를 다시 만들려고합니다. 버전 2가 작동하지 않는 이유를 알 수 없습니다 (버전 1이 작동 함).콜백 함수 "every"사용

이 책은

버전 하나

function every(array, test) 
{ 
    var boolean = true; 

    array.forEach(function(ele) 
    { 
     if (!test(ele)) 
      boolean = false; 
    }); 

    return boolean; 
} 

console.log(every([NaN, NaN, NaN], isNaN)); 
// → true 
console.log(every([NaN, NaN, 4], isNaN)); 
// → false 

버전 두

function every(array, test) 
{ 
    array.forEach(function(ele) 
    { 
     if (!test(ele)) 
      return false; 
    }); 

    return true; 
} 

console.log(every([NaN, NaN, NaN], isNaN)); 
// → true 
console.log(every([NaN, NaN, 4], isNaN)); 
// → true 
+0

다음 함수가 있다고 상상해보십시오 :'function foo() {return 'foo'; }; function bar() {foo(); return 'bar'; };'. 내가 전화 할 때'bar'는 무엇을 반환합니까? 그런 다음 버전 2로 전송하십시오. –

답변

5
"사실 모든 반환 술어는 배열의 모든 요소에 대해 true를 반환하는 경우에만"고 말했다

버전 2에서 forEach() 콜백 f에서 돌아 오는 중입니다. 기름 부음. 그러면 forEach 함수로 돌아가고 다음 반복으로 넘어 가면 every 함수에서 반환되지 않습니다.

+0

흥미 롭습니다. 그런 다음 모든 기능에서 돌아갈 수있는 방법이 있습니까? –

+0

아니요, 없습니다. 첫 번째 버전을 작성한 방법은 정상적인 방법입니다. – Barmar

+0

좋아요, 고마워요! –