জাভাস্ক্রিপ্টে ফাংশন ঘোষণা এবং ফাংশন এক্সপ্রেশনের মধ্যে পার্থক্য সম্পর্কে জানুন।
এটি একটি ফাংশন এক্সপ্রেশন:
// Function expression
let excuteMe = function () {
console.log('Function Expression')
}
এটি একটি ফাংশন ঘোষণা:
// Function declaration
function excuteMe() {
console.log('Function Declaration')
}
ফাংশন এক্সপ্রেশন এবং ঘোষণা প্রায় একই জিনিস. উপরের উভয় উদাহরণেই, আপনি তাদের এইভাবে কল করবেন executeMe()
এবং তারপর তারা তাদের কোড ব্লক {..}
এর ভিতরে যাই হোক না কেন কোড চালায় .
কিন্তু একটি পার্থক্য আছে, তারা কি করে তা নয়, কিন্তু কিভাবে সেগুলি কার্যকর করা হয় — অথবা বরং, অর্ডার তারা পড়া এবং মৃত্যুদন্ড কার্যকর করা হয় — এবং এটি গুরুত্বপূর্ণ।
এই ফাংশনটি ভালোভাবে চলবে:
// Call function declaration
executeMe()
// Function declaration
function excuteMe() {
console.log('Function Declaration')
}
যাইহোক, ফাংশন না হবে ভাল চালান (এটি একটি ত্রুটি নিক্ষেপ করবে):
// Call function
executeMe()
// Function expression
let excuteMe = function () {
console.log('Function Expression')
}
প্রথম উদাহরণ (ফাংশন ঘোষণা) কেন কাজ করে তা বোঝার জন্য, কিন্তু দ্বিতীয় উদাহরণ (ফাংশন এক্সপ্রেশন) কাজ করে না, আপনাকে শিখতে হবে কি উদ্ধার জাভাস্ক্রিপ্টে আছে, এবং তারপরে এটি বোঝা শুরু করবে।
উত্তোলন
জাভাস্ক্রিপ্টে, কোড উপরে থেকে নীচে চালানো হয়। সাধারণত, আপনি শুধুমাত্র আপনার স্ক্রিপ্ট ফাইলে (ক্রম অনুসারে) একটি ভেরিয়েবলের ঘোষণার পরে ব্যবহার করতে পারেন, তবে, ফাংশন ঘোষণা কোনো কোড কার্যকর করার আগে ওয়েব ব্রাউজার দ্বারা শীর্ষে উত্তোলন করা হয়।
হোস্টিং মানে হল আপনার ব্রাউজারের কোড ইন্টারপ্রেটার সর্বদা আপনার ফাংশন ঘোষণাগুলিকে ডাকার আগে (চালানোর জন্য বলা) সম্পর্কে জানে (পড়েছে)।
তাই আপনি যেকোন জায়গা থেকে আপনার ফাংশন ঘোষণাকে কল করতে এবং কার্যকর করতে পারেন আপনার জাভাস্ক্রিপ্ট ফাইলে, এমনকি ফাংশন ডিক্লেয়ারেশন আপনার স্ক্রিপ্ট ফাইলে শারীরিকভাবে বিদ্যমান থাকার আগে, অর্ডার অনুযায়ী। এটি ফাংশন ঘোষণাকে অনন্য করে তোলে।
ফাংশন ঘোষণা
যেকোন কোড চালানোর আগে, আপনার ব্রাউজার আপনার সম্পূর্ণ JS স্ক্রিপ্ট ফাইল লোড করে (পড়ে), এবং যেহেতু ফাংশন ঘোষণাগুলিকে নির্বাহের আদেশের শীর্ষে (উদ্ধার করা) স্থানান্তরিত করা হয়। আপনার কোড আসলে এই ক্রমে দোভাষী দ্বারা কার্যকর করা হয়:
// 1. Function declaration
function excuteMe() {
console.log('Function Declaration')
}
// 2. Call to function declaration
executeMe()
এমনকি যদি আপনার কোড শারীরিকভাবে আপনার স্ক্রিপ্ট ফাইলে বিপরীত ক্রমে লেখা হয়:
// Call to function declaration
executeMe()
// Function declaration
function excuteMe() {
console.log('Function Declaration')
}
এই কারণেই আপনার স্ক্রিপ্ট ফাইলে সংজ্ঞায়িত হওয়ার আগে বা পরে আপনার ফাংশন ঘোষণায় আপনি শারীরিকভাবে কল করেন কিনা তা বিবেচ্য নয়। উভয় পদ্ধতিই কাজ করবে কারণ জাভাস্ক্রিপ্ট সর্বদা ঘোষণা ফাংশন লোড করে ফাংশন চালানোর আগে কল সেই ফাংশন ঘোষণায়।
ফাংশন এক্সপ্রেশনগুলি উত্তোলন করে না
ফাংশন এক্সপ্রেশন উত্তোলন করা হয় না (প্রথমে পড়া হয় না)। ফাংশন এক্সপ্রেশনগুলি তখনই পড়া হয় যখন দোভাষী আপনার স্ক্রিপ্ট ফাইলের কোডের সেই লাইনে পৌঁছায়। তাই যদি আপনার ফাংশন এক্সপ্রেশন শারীরিকভাবে পরে বিদ্যমান থাকে আপনার ফাংশন কল (ক্রম অনুসারে) তারপর আপনার ব্রাউজারে চালানো জাভাস্ক্রিপ্ট ইন্টারপ্রেটার এটি কার্যকর করতে পারে না।
তাই এটি কাজ করবে না:
// Call function expression
executeMe()
// Function expression
let excuteMe = function () {
console.log('Function Expression')
}
উপরের কোডটি আপনাকে একটি ত্রুটি দেবে কারণ আপনি একটি ফাংশন চালানোর চেষ্টা করছেন (executeMe()
) আপনার ব্রাউজারের কোড ইন্টারপ্রেটার এমনকি আপনার ফাংশন এক্সপ্রেশনের অস্তিত্ব সম্পর্কে জানতে (পড়েছে) আগে।
কোড অর্ডার অদলবদল করুন এবং এটি কাজ করবে:
// Function expression
let excuteMe = function () {
console.log('Function Expression')
}
// Call function expression
executeMe()
কোড অর্ডারের কারণে উপরের কোডটি কাজ করে। আপনার ব্রাউজার প্রথমে আপনার ভেরিয়েবলের সাথে লাইনটি পড়বে (উপর থেকে নীচে) let executeMe
যেটিতে আপনার ফাংশন এক্সপ্রেশন রয়েছে — এবং তারপরে এটিকে executeMe()
দিয়ে কার্যকর করতে বলা হয় .
আপনি কোনটি ব্যবহার করবেন?
আপনি ফাংশন ঘোষণা বা ফাংশন এক্সপ্রেশন ব্যবহার করেন কিনা তা গুরুত্বপূর্ণ নয়। আপনার ক্যারিয়ার তৈরি বা ভাঙতে যাচ্ছে না। ধারাবাহিক হওয়া আরও গুরুত্বপূর্ণ। একটি শৈলী বাছুন, এবং অন্তত একই প্রকল্পের মধ্যে এটির সাথে লেগে থাকুন৷
এমনকি আরও গুরুত্বপূর্ণ, আপনি যদি ফাংশন এক্সপ্রেশন ব্যবহার করে এমন একটি দলে যোগদান করেন, ভাল, তাহলে আপনার ব্যক্তিগত পছন্দ যাই হোক না কেন, কোডবেসকে সামঞ্জস্যপূর্ণ রাখতে তাদের রেসিপি অনুসরণ করা উচিত।
ফাংশন এক্সপ্রেশন ব্যবহার করার জন্য একটি ভাল কেস হল যে তারা আপনাকে একটি কঠোর কোড কাঠামো ব্যবহার করতে বাধ্য করে, যা আপনার কোডকে আরও অনুমানযোগ্য করে তোলে। ফাংশন ঘোষণা, ক্ষমাশীল কারণ আপনি সেগুলিকে আপনার স্ক্রিপ্টের যে কোনও জায়গা থেকে কল করতে পারেন এবং এইভাবে এটি পারি অসামঞ্জস্যপূর্ণ কোড কাঠামোর দিকে নিয়ে যায়, বিশেষ করে যদি একাধিক বিকাশকারী একই প্রকল্পে কাজ করে।
ফাংশন ঘোষণা ব্যবহার করার জন্য একটি ভাল কেস (বিতর্কযোগ্য) হল আপনার যদি কিছু ফাংশন থাকে যা অন্য ফাংশনগুলিকে কল করে, কিন্তু আপনি বিভ্রান্ত হন এবং কিছু কারণে আপনার ফাংশন এক্সপ্রেশনগুলি কার্যকর করতে না পারেন কারণ কিছু অর্ডার বিভ্রান্তির কারণে