2012-07-30 79 views
76

假設我有一個這樣的循環:返回是否停止循環?

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

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

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

快捷提問:請問return停止本身循環的執行力?

回答

99

是,return停止執行並退出該功能。 return總是立即退出其功能,如果它位於循環內部,則不再執行。

容易驗證自己:

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

alert(returnMe()); 
// 1 

注:參見this other answer有關try/catch/finally的特殊情況。

+5

> return總是立即退出它的函數,如果它在一個循環內部沒有進一步的執行 [...除非它是一個forEach循環](http:// stackoverflow。com/questions/34653612/what-does-return-keyword-mean-inside-foreach-function/34653650) – 2016-06-27 10:50:30

+3

@ o-o真正的排序。 'return'仍然從函數回調的當前迭代中返回,但是不會被期望從整個調用方法'forEach()'中斷開。所以它不是從_loop本身返回,而是從循環執行的回調中返回。在鏈接問題的代碼示例中,輸出爲'1,2,4,5',因爲返回而跳過了'3'。 – 2016-06-27 11:33:17

+0

也許紅線是'return'將始終從當前'this'上下文返回。 – 2016-06-27 16:06:06

5

是的,一旦執行return語句,整個函數就會在那一點退出。

想象一下,如果沒有並繼續循環,並且每次執行return語句會發生什麼?當你考慮它時,它會使返回值的含義無效。

36

大多數個案(包括這一個),return將立即退出。但是,如果退貨在帶有finally塊的try塊中,則finally將始終執行,並且可以「覆蓋」try中的return

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 
+0

oldie but goodie – 2016-09-02 03:05:12

0

「重返」不退出的功能,但如果你想返回數據的大量資金,你可以將其存儲在一個數組,然後通過1在返回它,而不是試圖給每個數據塊1的返回循環。

0

return語句只有在函數內部存在循環時纔會停止循環。否則,你會得到這個錯誤:

Uncaught SyntaxError: Illegal return statement(…) 
0

答案是肯定的,如果你寫了return語句,控件立即返回調用方法。 finally語句的異常,在return語句後執行。

最後還可以覆蓋你返回的值,如果你返回finally塊內。 LINK:Try-catch-finally-return clarification

Return語句定義按:

Java文檔:

a return statement can be used to branch out of a control flow block and exit the method

MSDN文檔:

The return statement terminates the execution of a function and returns control to the calling function. Execution resumes in the calling function at the point immediately following the call.

百科:

A return statement causes execution to leave the current subroutine and resume at the point in the code immediately after where the subroutine was called, known as its return address. The return address is saved, usually on the process's call stack, as part of the operation of making the subroutine call. Return statements in many languages allow a function to specify a return value to be passed back to the code that called the function.

+0

您需要正確鏈接您使用的來源,並理想地格式化報價。 – 2017-05-30 04:54:43

+0

現在看起來不錯嗎? – user1179299 2017-05-31 14:47:47

+0

我很欣賞語法修復,但是仍然沒有任何鏈接,而且您仍然沒有使用blockquote格式。 – 2017-05-31 14:56:05