web-gelistirme-sc.com

Dönüş bir döngüyü durdurur mu?

Diyelim ki böyle bir döngü var:

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

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

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

Hızlı soru: return, döngünün kendi içinde yürütülmesini durdurur mu?

123
frenchie

Evet, return çalışmayı durdurur ve işlevden çıkar. return her zaman ** derhal işlevinden çıkar, eğer bir for döngüsü içindeyse başka bir işlem yapmaz.

Kendiniz için kolayca doğrulanabilir:

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

alert(returnMe());
// 1

** Notlar: Bkz. bu diğer cevaptry/catch/finally özel vakası hakkında _ ve bu cevap , forEach döngülerinin kendi işlev kapsamının dışına çıkmayacağı hakkında içeren işlev.

163

çoğ durumlarda (bununla birlikte), return derhal çıkar. Bununla birlikte, geri dönüş, eşlik eden try bloğu olan bir finally bloğunda ise, finally her zaman return içindeki try 'ini geçersiz kılabilir "_ .

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
55
John Girata

return deyimi yalnızca işlevin içindeyse, bir döngüyü durdurur. Aksi takdirde, bu hatayı alırsınız:

Uncaught SyntaxError: Illegal return statement(…)
7
Damjan Pavlica

Evet, return ifadesi çalıştırıldığında, işlev tam o noktada çıkar.

Yapmasanız ve döngü devam ederse ve bu return cümlesini her seferinde uygularsanız ne olacağını hayal edin? Düşündüğünüzde bir değer getirmenin anlamını geçersiz kılar.

5
Keldon Alleyne

Cevap evet, return cümlesi yazarsanız kontroller hemen arayan yöntemine geri döner. Return ifadesinden sonra yürütülen, nihayet blok hariç.

ve nihayet bloğun içine döndüğünüzde, döndürdüğünüz değeri geçersiz kılabilir. LINK: Dene-yakala-sonunda-geri dönüş açıklaması

İade Açıklaması tanımına göre:

Java Belgeleri:

bir return deyimi bir kontrol akış bloğundan dallanma ve yöntemden çıkma için kullanılabilir

MSDN Belgeleri:

Return ifadesi bir işlevin yürütülmesini sonlandırır ve denetimi çağıran işleve döndürür. İşlem, çağrıyı hemen takip eden noktada çağrı işlevine devam eder.

Wikipedia:

Bir return ifadesi, yürütmenin mevcut alt rutini terk etmesine ve alt rutinin çağrıldığı yerden sonra, dönüş adresi olarak bilinen koddaki noktada devam etmesine neden olur. Dönüş adresi, genellikle alt işlem çağrısı yapma işleminin bir parçası olarak genellikle işlem çağrısı yığına kaydedilir. Birçok dilde return ifadeleri, bir işlevin işlev olarak adlandırılan koda geri alınacak bir dönüş değeri belirtmesine izin verir.

1
user1179299

Bu kod, bir for of döngüsündeki ilk yinelemeden sonra döngüden çıkar:

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

aşağıdaki kod koşula atlayacak ve bir for of döngüsüne devam edecektir:

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

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

"return" işlevden çıkar, ancak büyük miktarda veri döndürmek istiyorsanız, onu bir dizide saklayabilir ve ardından her bir veri parçasını döngü içinde 1'e 1 döndürmeye çalışmak yerine geri gönderebilirsiniz.

0
Brendon McBain