Փակումները հաճախ օգտագործվում են JavaScript-ում՝ օբյեկտների տվյալների գաղտնիության համար, իրադարձությունների մշակիչներում և հետադարձ կապի գործառույթներում, ինչպես նաև մասնակի հավելվածներում, պտտման և այլ ֆունկցիոնալ ծրագրավորման օրինաչափություններում:
Ի՞նչ է փակումը և ինչպե՞ս կօգտագործեիք այն:
Փակումը մի միջոց է ֆունկցիայի մեջ փոփոխականների հասանելիությունը պահպանելու այն բանից հետո, երբ այդ ֆունկցիան վերադարձրեց: … Փակման դեպքում այդ փոփոխականները մնում են մի որոշ ժամանակ, քանի որ ֆունկցիան վերադարձնելուց հետո փոփոխականներին հղում կա:
Որտե՞ղ կարող եք դիմել փակման իրական ժամանակի նախագծում:
Ստեղծվում է փակում, երբ ներքին ֆունկցիան ինչ-որ կերպ հասանելի է դառնում արտաքին ֆունկցիայից դուրս գտնվող ցանկացած շրջանակի համար: Վերևի կոդի մեջ արտաքին ֆունկցիայի անվան փոփոխականը հասանելի է ներքին ֆունկցիաներին, և ներքին փոփոխականներին մուտք գործելու այլ միջոց չկա, բացառությամբ ներքին ֆունկցիաների:
Ի՞նչ է փակման օրինակը:
Վերոնշյալ օրինակում արտաքին ֆունկցիայի Counter-ը վերադարձնում է IncreaseCounter ներքին ֆունկցիայի հղումը: IncreaseCounter-ը մեծացնում է արտաքին փոփոխական հաշվիչը մեկ: … Ըստ փակման սահմանման՝ եթե ներքին ֆունկցիան մուտք ունի արտաքին ֆունկցիայի փոփոխականներ, ապա միայն այն կոչվում է փակում: Հետևյալը փակում չէ:
Ո՞ր լեզուներն են փակվում:
Լեզուները, որոնք աջակցում են փակմանը (օրինակ՝ JavaScript-ը, Swift-ը և Ruby), թույլ կտան ձեզ հղում պահել շրջանակին (ներառյալ դրա մայրը):scopes), նույնիսկ այն բանից հետո, երբ բլոկի, որում հայտարարված են այդ փոփոխականները, ավարտվի գործարկումը, պայմանով, որ դուք ինչ-որ տեղ հղում եք պահում այդ բլոկին կամ գործառույթին: