এর উদ্দেশ্য closures
কেবল রাষ্ট্র সংরক্ষণ করা ; সেইজন্য নাম closure
- এটি রাষ্ট্রের বাইরে বন্ধ হয়ে যায় । আরও ব্যাখ্যা স্বাচ্ছন্দ্যের জন্য, আমি জাভাস্ক্রিপ্ট ব্যবহার করব।
সাধারণত আপনার একটি ফাংশন রয়েছে
function sayHello(){
var txt="Hello";
return txt;
}
যেখানে ভেরিয়েবলের গুলি এর স্কোপ এই ফাংশনের সাথে আবদ্ধ। সুতরাং কার্যকর করার পরে ভেরিয়েবল txt
সুযোগের বাইরে চলে যায়। ফাংশনটি শেষ হয়ে যাওয়ার পরে এটি অ্যাক্সেস বা ব্যবহারের কোনও উপায় নেই।
বন্ধগুলি হ'ল ভাষা নির্মাণ, যা পূর্বে যেমন বলা হয়েছিল - ভেরিয়েবলের রাষ্ট্র সংরক্ষণ এবং এর সুযোগকে দীর্ঘায়িত করার অনুমতি দেয়।
এটি বিভিন্ন ক্ষেত্রে কার্যকর হতে পারে। একটি ব্যবহারের ক্ষেত্রে হ'ল উচ্চতর ক্রিয়াকলাপ নির্মাণ ।
গণিত এবং কম্পিউটার বিজ্ঞানে উচ্চতর অর্ডার ফাংশন (কার্যকরী ফর্ম, ফাংশনাল বা ফান্টেক্টর) এমন একটি ফাংশন যা নিম্নলিখিতগুলির মধ্যে কমপক্ষে একটি করে: 1
- ইনপুট হিসাবে এক বা একাধিক ফাংশন নেয়
- একটি ফাংশন আউটপুট
একটি সহজ, তবে স্বীকারযোগ্য যে খুব বেশি দরকারী উদাহরণ নয়:
makeadder=function(a){
return function(b){
return a+b;
}
}
add5=makeadder(5);
console.log(add5(10));
আপনি একটি ফাংশন সংজ্ঞায়িত করেন makedadder
যা একটি পরামিতি ইনপুট হিসাবে নেয় এবং একটি ফাংশন দেয় । একটা হল বাইরের ফাংশন function(a){}
এবং ভিতরের function(b){}{}
.Further আপনি সংজ্ঞায়িত (implicitely) অন্য ফাংশন add5
উচ্চতর ক্রম funtion কলিং ফলে makeadder
। makeadder(5)
একটি বেনাম ( অভ্যন্তরীণ ) ফাংশন প্রদান করে, যার ফলে 1 প্যারামিটার লাগে এবং বাহ্যিক ফাংশনের পরামিতি এবং অভ্যন্তরীণ ফাংশনের প্যারামিটারের যোগফল দেয়।
কৌতুক যে ফিরে যখন হল, ভিতরের ফাংশন, যা প্রকৃত যোগ করে, বাইরের ফাংশনের প্যারামিটার পরিধি ( a
) সংরক্ষিত হয়। add5
মনে আছে , যে পরামিতি a
ছিল 5
।
বা কমপক্ষে কোনওভাবে ব্যবহারযোগ্য উদাহরণ দেখানোর জন্য:
makeTag=function(openTag, closeTag){
return function(content){
return openTag +content +closeTag;
}
}
table=makeTag("<table>","</table>")
tr=makeTag("<tr>", "</tr>");
td=makeTag("<td>","</td>");
console.log(table(tr(td("I am a Row"))));
আর একটি সাধারণ ব্যবহারের নাম হ'ল তথাকথিত IIFE = অবিলম্বে অনুরোধ করা ফাংশন এক্সপ্রেশন। এটি জাভাস্ক্রিপ্টে জাল ব্যক্তিগত সদস্যের ভেরিয়েবলগুলিতে খুব সাধারণ । এটি একটি ফাংশনের মাধ্যমে করা হয়, যা একটি ব্যক্তিগত সুযোগ তৈরি করে = closure
, কারণ এটি সংজ্ঞা দেওয়ার পরে তা তাত্ক্ষণিকভাবে হয়। কাঠামোটি হ'ল function(){}()
। ()
সংজ্ঞা পরে বন্ধনী লক্ষ্য করুন । এটি প্রকাশের মডিউল প্যাটার্ন সহ অবজেক্ট-তৈরির জন্য এটি ব্যবহার সম্ভব করে তোলে । কৌতুকটি একটি সুযোগ তৈরি করছে এবং একটি অবজেক্ট ফিরিয়ে দিচ্ছে, যা আইআইএফই কার্যকর করার পরে এই সুযোগে অ্যাক্সেস পেয়েছে।
আদির উদাহরণটি এরকম দেখাচ্ছে:
var myRevealingModule = (function () {
var privateVar = "Ben Cherry",
publicVar = "Hey there!";
function privateFunction() {
console.log( "Name:" + privateVar );
}
function publicSetName( strName ) {
privateVar = strName;
}
function publicGetName() {
privateFunction();
}
// Reveal public pointers to
// private functions and properties
return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};
})();
myRevealingModule.setName( "Paul Kinlan" );
প্রত্যাবর্তিত অবজেক্টটিতে ফাংশনগুলির (উদাহরণস্বরূপ publicSetName
) উল্লেখ রয়েছে , যার পরিবর্তে "ব্যক্তিগত" ভেরিয়েবলগুলির অ্যাক্সেস থাকে privateVar
।
তবে এটি জাভাস্ক্রিপ্টের জন্য আরও বিশেষ ব্যবহারের ক্ষেত্রে।
কোনও প্রোগ্রামার কোন সুনির্দিষ্ট কাজটি সম্পাদন করবেন যা বন্ধের মাধ্যমে সেরা পরিবেশিত হতে পারে?
যে জন্য বেশ কয়েকটি কারণ আছে। একটি হতে পারে, এটি তাঁর পক্ষে স্বাভাবিক, কারণ তিনি কার্যকরী দৃষ্টান্ত অনুসরণ করেন । বা জাভাস্ক্রিপ্টে: ভাষার কিছু গণ্ডগোল বাধা দেওয়ার জন্য ক্লোজারের উপর নির্ভর করা কেবল প্রয়োজন ।