[javascript] 리턴이 루프를 중지합니까?

다음과 같은 루프가 있다고 가정하십시오.

for (var i = 0; i < SomeArrayOfObject.length; i++) {

  if (SomeArray[i].SomeValue === SomeCondition) {

     var SomeVar = SomeArray[i].SomeProperty;
     return SomeVar;
  }
}

빠른 질문 : return루프 실행 자체를 중지합니까?



답변

예, return실행을 중지하고 기능을 종료합니다. return항상 **는 for 루프 안에 있으면 더 이상 실행하지 않고 즉시 기능을 종료합니다.

쉽게 확인할 수 있습니다.

function returnMe() {
  for (var i=0; i<2; i++) {
    if (i === 1) return i;
  }
}

alert(returnMe());
// 1

** 참고 : 특별한 경우에 대한 다른 답변try/catch/finally 과 forEach 루프가 자체 기능 범위를 갖는 방법에 대한 이 답변을 참조하십시오 .


답변

에서 가장 (본 프로그램 포함)의 경우, return즉시 종료됩니다. 그러나 리턴이 try수반되는 finally블록이 있는 블록에 있으면 항상를 finally실행하고 return에서의 “재정의”할 수 있습니다 try.

function foo() {
    try {
        for (var i = 0; i < 10; i++) {
            if (i % 3 == 0) {
                return i; // This executes once
            }
        }
    } finally {
        return 42; // But this still executes
    }
}

console.log(foo()); // Prints 42


답변

return문은 함수 내부의 경우에만 루프를 중지합니다. 그렇지 않으면이 오류가 발생합니다.

Uncaught SyntaxError: Illegal return statement(…)


답변

이 코드는 루프에서 첫 번째 반복 후에 루프를 종료합니다 for of.

const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
  if (iterator.name == 2) {
    return;
  }
  console.log(iterator.name);// 1
}

아래 코드는 조건을 뛰어 넘고 for of루프를 계속 합니다.

const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];

for (const iterator of objc) {
  if (iterator.name == 2) {
    continue;
  }
  console.log(iterator.name); // 1  , 3
}


답변

예, 한번 return 명령문이 실행되면 바로 그 시점에서 전체 기능이 종료됩니다.

반복하지 않고 return매번 해당 명령문을 실행하지 않으면 어떻게 될지 상상해보십시오 . 생각할 때 값을 반환한다는 의미가 무효화됩니다.


답변

답은 ‘예’입니다. return 문을 작성하면 컨트롤이 즉시 호출자 메서드로 돌아갑니다. finally 문을 제외하고는 return 문 다음에 실행됩니다.

finally 블록 내부로 돌아 오면 반환 한 값을 재정의 할 수도 있습니다. 링크 : 시범 잡기 최종 반품 설명

다음과 같은 반환 문 정의 :

자바 문서 :

return 문을 사용하여 제어 흐름 블록에서 분기하고 메서드를 종료 할 수 있습니다.

MSDN 설명서 :

return 문 은 함수 실행을 종료 하고 호출 함수에 제어를 반환합니다. 호출 바로 다음 지점에서 호출 기능에서 실행이 재개됩니다.

위키 백과 :

return 문은 실행이 현재 서브 루틴을 떠나서 서브 루틴이 호출 된 직후 리턴 코드라고하는 코드의 지점에서 재개되도록합니다. 리턴 주소는 일반적으로 서브 루틴 호출을 수행하는 작업의 일부로 프로세스의 호출 스택에 저장됩니다. 여러 언어로 된 return 문을 사용하면 함수가 함수를 호출 한 코드에 반환 값을 다시 지정할 수 있습니다.


답변

“return”은 함수를 종료하지만 많은 양의 데이터를 반환하려는 경우 배열에 저장 한 다음 루프에서 각 데이터를 1 씩 1 씩 반환하는 대신 반환 할 수 있습니다.