Finally أم الكود فقط؟
الأهمية: 5
قارن بين جزئي الكود.
-
الأول يستخدم
finally
لتنفيذ الكود بعدtry...catch
:try { work work } catch (err) { handle errors } finally { تنظيف مكان العمل }
-
القطعة الثانية تضع عملية التنظيف مباشرة بعد
try...catch
:try { work work } catch (err) { handle errors } تنظيف مكان العمل
نحن بالتأكيد بحاجة إلى التنظيف بعد العمل ، لا يهم إذا كان هناك خطأ أم لا.
هل هناك ميزة في استخدام finally
أم أن جزئي الكود متساويان؟ إذا كان هناك مثل هذه الميزة ، فقم بإعطاء مثال عندما يكزن مهم.
يصبح الفرق واضحًا عندما ننظر إلى الكود داخل دالة.
السلوك يختلف إذا كان هناك “الانتقال” من try...catch
.
على سبيل المثال، عند وجود return
داخل try...catch
. الشرط finally
يعمل في حالة أي خروج من try...catch
، حتى عند استخدام عبارة return
: مباشرة بعد انتهاء try...catch
، ولكن قبل أن يستعيد الكود السيطرة.
function f() {
try {
alert('إبدء');
return "النتيجة";
} catch (err) {
/// ...
} finally {
alert('نظف!');
}
}
f(); // نظف!
…أو عندما يكون هناك throw
, مثلما هو الحال هنا:
function f() {
try {
alert('إبدء');
throw new Error("an error");
} catch (err) {
// ...
if("can't handle the error") {
throw err;
}
} finally {
alert('نظف!')
}
}
f(); // نظف!
يضمن finally
التنظيف. إذا وضعنا الكود في نهاية f
, فلن يتم تشغيلها في هذه المواقف.