شاید اینطور فکر کنیم که وقتی به
return "try" میرسیم، اجرای تابع متوقف میشه و خروجی کد "try" میشه؛ اما "finally" چاپ میشه. برای درک بهتر این موضوع لازمه با Completion Record آشنا بشیم.ا Completion Record به آبجکتی گفته میشه که نتیجه اجرای یه دستور یا عبارت رو مشخص میکنه. js با اجرای هر statement یه Completion Record ایجاد میکنه و ۳ تا فیلد داره:
یک. type برای نوع نتیجه که یکی از مقادیر normal (اجرای عادی)، break، continue، return و throw میتونه باشه.
دو. value برای مقدار تولید شده.
سه. target که مقصد رو برای break و continue مشخص میکنه.
توی مثال وقتی return "try" اجرا میشه، یه Completion Record با مشخصات (2) ایجاد میشه. اما قبل از اینکه تابع واقعا return کنه، بلاک finally اجرا میشه. داخل finally هم یه return داریم که Completion Record (3) رو تولید میکنه و نتیجه قبلی جایگزین میشه. پس در نهایت مقدار "finally" برگردونده میشه.
اگه finally بهصورت normal تموم میشد و Completion جدیدی مثل return یا throw تولید نمیکرد، نتیجه قبلی حفظ میشد.
#javascript
@techstuff100
