জাভাস্ক্রিপ্ট ফাংশন ক্লোজার (JS Function Closure)

Web Development - জাভাস্ক্রিপ্ট (JavaScript) - জাভাস্ক্রিপ্ট ফাংশন (JS Function) | NCTB BOOK

জাভাস্ক্রিপ্ট ভ্যারিয়েবলগুলো লোকাল বা গ্লোবাল স্কোপে থাকতে পারে।

ভ্যারিয়েবলকে ক্লোজারের মাধ্যমে প্রাইভেট ভ্যারিয়েবল করা যায়।


গ্লোবাল ভ্যারিয়েবল

ফাংশনের ভিতরে ডিফাইন করা সকল ভ্যারিয়েবলকে একটি ফাংশন এক্সেস করতে পারে। নিচের উদাহরণে ভ্যারিয়েবল a হচ্ছে লোকাল ভ্যারিয়েবল। লোকাল ভ্যারিয়েবল শুধুমাত্র ফাংশনের ভিতর থেকে এক্সেস করা যায়, ফাংশনের বাহিরের কোথাও একে এক্সেস করা যাবে না।

kt_satt_skill_example_id=1212

ফাংশনের বাহিরে ডিফাইন করা ভ্যারিয়েবলকেও এক্সেস করতে পারে। নিচের উদাহরণে ভ্যারিয়েবল a হচ্ছে গ্লোবাল ভ্যারিয়েবল। গ্লোবাল ভ্যারিয়েবল ওয়েব পেজে উইন্ডো অবজেক্টের অধীনস্থ। গ্লোবাল ভ্যারিয়েবলকে সকল স্ক্রিপ্ট ব্যবহার এবং পরিবর্তন করতে পারে।

kt_satt_skill_example_id=1214

একই নামের গ্লোবাল ও লোকাল ভ্যারিয়েবল পরস্পর থেকে ভিন্ন। একটি পরিবর্তন করলেও অন্যটি অপরিবর্তিত থাকে।

var কি-ওয়ার্ড ছাড়া তৈরিকৃত সকল ভ্যারিয়েবল গ্লোবাল ভ্যারিয়েবলে পরিণত হয়।


গননা সমস্যা

ধরুণ আপনি কোনোকিছু গণনা করার জন্য একটি ভ্যারিয়েবল ব্যবহার করবেন এবং আপনি চান এটি সব ফাংশনে কাজ করুক।

এক্ষেত্রে আপনি একটি গ্লোবাল ভ্যারিয়েবল এবং ফাংশন ব্যবহার করতে পারেনঃ

kt_satt_skill_example_id=1216

এখানে একটি সমস্যা হচ্ছে, add() ফাংশনকে কল করা ছাড়াই যেকোনো স্ক্রিপ্ট পেজের counter পরিবর্তন করতে পারবে।

counter কে শুধুমাত্র add() পরিবর্তন করতে পারবে, এমন অবস্থা তৈরি করতে হবে।

যদি আমরা ফাংশনের ভিতরে counter ডিক্লেয়ার করি, তাহলে add() ফাংশন ছাড়া counter পরিবর্তন করা যাবে নাঃ

kt_satt_skill_example_id=1217

ইহা কার্যকর না! প্রতিবার যখন add() ফাংশন কল করা হয়, counter এর মান 1 থাকে।


জাভাস্ক্রিপ্ট নেস্টেড ফাংশন

সকল ফাংশন গ্লোবাল স্কোপকে এক্সেস করতে পারে।  

জাভাস্ক্রিপ্টের সকল ফাংশন তাদের উপরের স্কোপকে এক্সেস করতে পারে।

জাভাস্ক্রিপ্ট নেস্টেড ফাংশন সাপোর্ট করে। নেস্টেড ফাংশন তাদের উপরের স্কোপকে এক্সেস করতে পারে।

নিচের উদাহরণে, plus() ফাংশনটি প্যারেন্ট ফাংশনের counter ভ্যারিয়েবলকে এক্সেস করতে পারবেঃ

kt_satt_skill_example_id=1220

এখনও সমাধান পাওয়া যায়নি। যদি আমরা বাইরে থেকে plus() ফাংশনকে এক্সেস করতে পারি তবে এই সমস্যার সমাধান পাওয়া যাবে।

counter = 0 এই স্টেটমেন্টটি শুধুমাত্র একবার এক্সিকিউট করার একটি উপায় বের করতে হবে।


জাভাস্ক্রিপ্ট ক্লোজার

kt_satt_skill_example_id=1222

উদাহরণের ব্যাখ্যা

এখানে add ভ্যারিয়েবলে সেলফ-ইনভোকিং ফাংশনের ভ্যালু রিটার্ন করা হয়েছে।

সেলফ-ইনভোকিং ফাংশনটি একবার রান হয়। ইহা counter এর ভ্যালু 0 সেট করে এবং একটি ফাংশন এক্সপ্রেশন রিটার্ন করে।

এই পদ্ধতিতে add একটি ফাংশনে পরিণত হয় এবং ইহা তার প্যারেন্ট স্কোপের counter এক্সেস করতে পারে।

একে জাভাস্ক্রিপ্ট ক্লোজার বলে। এর দ্বারা ফাংশনে প্রাইভেট ভ্যারিয়েবল তৈরি করা সম্ভব।

ক্লোজার হচ্ছে একটি ফাংশন যার প্যারেন্ট ফাংশন কাজ করা বন্ধ করে দিলেও এই ফাংশনটি প্যারেন্টের স্কোপকে এক্সেস করতে পারে।

Content added || updated By
Promotion