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


157

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

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

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

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

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

답변:


206

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

쉽게 확인할 수 있습니다.

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

alert(returnMe());
// 1

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


25
> return은 루프 안에 있으면 더 이상 실행하지 않고 항상 즉시 함수를 종료합니다 ... forEach 루프가 아닌 한
oo

9
@oo 사실입니다. return여전히 자체 범위 내에서 함수 콜백의 현재 반복에서 리턴하지만 전체 호출 메소드에서 벗어날 것으로 예상되지는 않습니다 forEach(). 따라서 루프 자체 에서 반환되지 않지만 루프가 실행하는 콜백에서 반환됩니다. 연결된 질문의 코드 예제에서 반환으로 인해 출력이 1,2,4,5건너 뜁니다 3.
Michael Berkowski 2016 년

어쩌면 빨간 실은 return항상 현재 this상황 에서 돌아올 것 입니다.
oo

“잠재적으로”조기 루프 종료를 위해 배열에서 forEach () 또는 for ()를 사용하는 대안은 some ()을 사용하는 것입니다.
AnBisw

1
나는이 어떤 사람에 대한 사소한 알고 있지만 더 이상 필요가 없습니다 때문에 이렇게 좋은 알고있다 break다음과 return.
NONAME

60

에서 가장 (본 프로그램 포함)의 경우, 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

8

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

Uncaught SyntaxError: Illegal return statement(…)

6

이 코드는 루프에서 첫 번째 반복 후에 루프를 종료합니다 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
}

내가 예상처럼 덕분에,이 도움이 나를 많이 난 노드를 사용하고 있습니다 및 반환은 ... 각과에 대한 제에 대한 위반의되면,이 일을 계속
veroneseComS

5

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

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


1

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

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

다음과 같은 반환 문 정의 :

자바 문서 :

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

MSDN 설명서 :

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

위키 백과 :

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


사용한 소스를 올바르게 연결하고 따옴표 형식을 이상적으로 지정해야합니다.
Nathan Tuggy

지금은 괜찮습니까?
user1179299

문법 수정에 감사하지만 여전히 링크가 없으며 여전히 블록 인용 형식을 사용하고 있지 않습니다.
Nathan Tuggy

0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.