বেনামে ফাংশন প্রকাশের ক্ষেত্রে, ফাংশনটি বেনামে - আক্ষরিক অর্থে, এর কোনও নাম নেই। যে ভেরিয়েবলটি আপনি এটিকে অর্পণ করছেন তার একটি নাম রয়েছে তবে ফাংশনটি তা করে না। (আপডেট: ES5 এর মাধ্যমে এটি সত্য ছিল E ES2015 [ওরফে ES6] হিসাবে, প্রায়শই বেনামে প্রকাশযুক্ত একটি ফাংশন একটি আসল নাম পায় [তবে কোনও স্বয়ংক্রিয় শনাক্তকারী নয়], পড়ুন ...)
নামগুলি দরকারী। নামগুলি স্ট্যাক ট্রেস, কল স্ট্যাক, ব্রেকপয়েন্টের তালিকা ইত্যাদিতে দেখা যায় নামগুলি একটি ভাল জিনিস ™ ™
(আপনাকে আইই এর পুরানো সংস্করণগুলিতে নামকরণের ফাংশন এক্সপ্রেশন সম্পর্কে সতর্ক থাকতে হবে [আইই 8 এবং নীচে], কারণ তারা ভুলভাবে দুটি সম্পূর্ণ আলাদা সময়ে দুটি সম্পূর্ণ পৃথক ফাংশন অবজেক্ট তৈরি করেছে [আমার ব্লগের নিবন্ধে আরও ডাবল নিন ] আপনার প্রয়োজন হলে আইই 8 সমর্থন করুন [!!], বেনামে ফাংশন এক্সপ্রেশন বা ফাংশন ঘোষণার সাথে থাকা ভাল তবে নামযুক্ত ফাংশন এক্সপ্রেশনগুলি এড়ানো উচিত))
নামযুক্ত ফাংশন এক্সপ্রেশন সম্পর্কে একটি মূল বিষয় হ'ল এটি ফান্টন বডির মধ্যে ফাংশনের জন্য সেই নামের সাথে একটি ইন-স্কোপ সনাক্তকারী তৈরি করে:
var x = function example() {
console.log(typeof example);
};
x();
console.log(typeof example);
ES2015 হিসাবে, যদিও অনেকগুলি "বেনামে" ফাংশন এক্সপ্রেশন নামের সাথে ফাংশন তৈরি করে এবং বিভিন্ন আধুনিক জাভাস্ক্রিপ্ট ইঞ্জিনগুলি প্রসঙ্গ থেকে অনুমানের নামগুলি সম্পর্কে যথেষ্ট স্মার্ট বলে পূর্বাভাস দেওয়া হয়েছিল। ES2015 এ, আপনার বেনামি ফাংশন এক্সপ্রেশনটির নামের সাথে একটি ফাংশন তৈরি করে boo
। যাইহোক, এমনকি ES2015 + শব্দার্থবিজ্ঞান সহ, স্বয়ংক্রিয় শনাক্তকারী তৈরি হয় না:
var obj = {
x: function() {
console.log(typeof x);
console.log(obj.x.name);
},
y: function y() {
console.log(typeof y);
console.log(obj.y.name);
}
};
obj.x();
obj.y();
ফাংশনটির নামের জন্য অ্যাসাইনমেন্টটি সেপফঞ্চননাম অ্যাবস্ট্রাক্ট অপারেশন দিয়ে সম্পন্ন করা হয় যা বিভিন্ন বৈশিষ্ট্যে ব্যবহৃত হয়।
সংক্ষিপ্ত সংস্করণটি মূলত যে কোনও সময় কোনও অ্যাসাইনমেন্ট বা আরম্ভের মতো কোনও কিছুর ডানদিকে কোনও বেনামী ফাংশন অভিব্যক্তি উপস্থিত হয়, যেমন:
var boo = function() { };
(বা এটি হতে পারে let
বা const
পরিবর্তে হতে পারে var
) , বা
var obj = {
boo: function() { }
};
বা
doSomething({
boo: function() { }
});
(যারা শেষ দুটি সত্যিই একই জিনিস) , ফলস্বরূপ ফাংশনটির একটি নাম থাকবে ( boo
উদাহরণগুলিতে)।
একটি গুরুত্বপূর্ণ এবং ইচ্ছাকৃত ব্যতিক্রম আছে: একটি বিদ্যমান বস্তুর উপর সম্পত্তি অর্পণ:
obj.boo = function() { };
এটি যখন নতুন বৈশিষ্ট্য যুক্ত হওয়ার প্রক্রিয়াটি চলছিল তখন তথ্য ফাঁসের উদ্বেগ উত্থাপিত হয়েছিল; আমার অন্য প্রশ্নের উত্তর এখানে বিশদ ।