Հայտարարությունները ցանկացած ծրագրավորման լեզվի հիմնական կառուցվածքն են, և JavaScript-ի օբյեկտների նման, JavaScript-ի հայտարարությունները նույնպես ունեն «արտաքին տեսք այլ լեզուների, բայց իրականում բոլորովին նույնը չէ»:
Մեր ավելի տարածված հայտարարությունները ներառում են փոփոխական հայտարարություններ, արտահայտություններ, պայմաններ, օղակներ և այլն: Սրանք բաներ են, որոնց բոլորը շատ լավ ծանոթ են, և ես այստեղ չեմ մանրամասնի նրանց վարքագծի մասին:
Որպեսզի հասկանանք, թե ինչն է առանձնահատուկ JavaScript-ի հայտարարություններում, նախ պետք է նայենք ավելի քիչ տարածված օրինակին: Ես կօգտագործեմ այս օրինակը, որպեսզի ձեզ ծանոթացնեմ JavaScript-ի հայտարարությունների կատարման մեխանիզմում ներգրավված հիմնական տեսակին. Ավարտման տեսակը:
Ավարտման տեսակ
Դիտարկենք օրինակ. Function foo-ում օգտագործվում են փորձի հայտարարությունների մի շարք: Մենք կարող ենք նախ մի փոքր փորձ անել: Եթե փորձի մեջ կա վերադարձի հայտարարություն, արդյո՞ք ներսում բովանդակությունը վերջապես դեռ կկատարվի: Եկեք նայենք կոդի մի հատվածին.
function foo(){ try{ return 0; } catch(err) { } finally { console.log("a") } } console.log(foo());
Փաստացի փորձերի միջոցով մենք կարող ենք տեսնել, որ վերջապես իսկապես կատարվում է, և վերադարձի հայտարարությունը նույնպես արդյունավետ է, և foo()-ը վերադարձնում է 0-ի արդյունք:
Չնայած վերադարձը կատարվում է, ֆունկցիան անմիջապես չի վերադառնում, և բովանդակությունը վերջապես կատարվում է: Այս պահվածքը խախտում է շատերի ինտուիցիան։
Ի՞նչ տեղի կունենա, եթե այս օրինակում վերջապես ավելացնենք վերադարձի հայտարարություն:
function foo(){ try{ return 0; } catch(err) { } finally { return 1; } } console.log(foo());
Փաստացի կատարման միջոցով մենք տեսնում ենք, որ վերադարձը վերջապես «գերակայում է» փորձի վերադարձին: Գործառույթում երկու անգամ վերադարձի կատարումը շատ մարդկանց ողջամտությունից դուրս է, և դա նաև վարքագիծ է, որը չի երևում այլ լեզուներում:
Նման տարօրինակ վարքագծի դեպքում մենք, անշուշտ, կարող ենք հիշել այն որպես մեկուսացված գիտելիք, բայց իրականում դրա հետևում գործում են մի շարք մեխանիզմներ:
Այս մեխանիզմի հիմքը JavaScript հայտարարության կատարման ավարտի կարգավիճակն է: Այն ներկայացնելու համար մենք օգտագործում ենք ստանդարտ տեսակ՝ Ավարտական գրառում (ես նշել եմ…