Soru Javascript hata ile uğraşmak deneyin .. yakalamak .. nihayet


Kullanıyorum şüphe var finally yanlış bir şekilde engellemek ve amacının temellerini anlamadım ...

 function myFunc() {
      try {
           if (true) {
                throw "An error";
           }
      } catch (e) {
           alert (e);
           return false;
      } finally {
           return true;
      }
 }

Bu işlev catch blok, uyarı "Bir hata", ancak daha sonra doğru döndürür. Neden yanlış değil?


51
2017-11-13 05:01


Menşei




Cevaplar:


Son olarak blok, try ve catch blokları çalıştırıldıktan sonra ancak try ... catch ifadesini izleyen ifadelerden önce yürütülecek ifadeleri içerir. Son olarak blok, bir istisnanın atılıp atılmadığına bakar. Bir istisna atılırsa, sonuncu bloktaki ifadeler, hiçbir yakalama bloğu istisnayı ele geçirmese bile yürütülür. Daha

finally blok her zaman çalışır, geri dönmeyi deneyin true Sonra senin try blok

function myFunc() {
     try {
         if (true) {
               throw "An error";
          }
          return true;
     } catch (e) {
          alert (e);
          return false;
     } finally {
          //do cleanup, etc here
     }
 }

81
2017-11-13 05:11





Sonunda bloklar, try bloğundan çıktığınızda yürütülür. Kodunuzda bu yanlış döndüğünüzde olur. Bu, dönüş değerini yanlış olarak ayarlar ve işlevden çıkmaya çalışır. Ama önce sonuncuyu tetikleyen ve geri dönüş değerini true değerinin üzerine çıkaran deneme bloğundan çıkmak zorundadır.

Pek çok kişi tarafından, işlev başına tek bir geri dönüş bildirisine sahip olmak için iyi bir programlama uygulaması olarak düşünülür. İşlevin başlangıcında bir var retval oluşturmayı ve işleviniz boyunca uygun şekilde doğru veya yanlış olarak ayarlamayı ve ardından kodu, altta tek bir dönüş için doğru şekilde düşecek şekilde yapılandırmayı düşünün.


10
2017-11-13 05:42



Tek bir dönüş değeri kullanmak, işlevlerin amacını ve netliğini basitleştirme sorununu çözmek için geçerli ve yararlı bir stratejidir. Dönüş değerini saklamak için bir değişken kullanmak da karmaşık dönüş değeri mantığını çözmek için geçerli bir araçtır. Bununla birlikte, bir işlevdeki çoklu döndürme ifadelerinin otomatik olarak kötü programlama uygulamasının bir işareti olduğunu söyleyemeyiz. Birçok durumda, sadece iyi: kodun yazılmasında daha basittir ve fonksiyonun amacının, onu anlaması gereken bir sonraki programcıya aktarılmasında nettir. function a(i) {if (i===undefined) {return;} ...} - ErikE
Üstündeki bu geri dönüş ifadesi çok açık. Bir if bloğun içine oturmak için tüm işlevi zorlamak sadece gerekli değildir. - ErikE


function getTheFinallyBlockPoint(someValue) {
    var result;
    try {
        if (someValue === 1) {
            throw new Error("Don't you know that '1' is not an option here?");
        }
        result = someValue
    } catch (e) {
        console.log(e.toString());
        throw e;
    } finally {
        console.log("I'll write this no matter what!!!");
    }

    return result;
};

getTheFinallyBlockPoint("I wrote this only because 'someValue' was not 1!!!");
getTheFinallyBlockPoint(1);

Bunu tarayıcınızın konsolunda çalıştırın ve aradığınız cevabı size verebilir.


1
2018-01-27 08:13