যদি "মৃত্যুদন্ড কার্যকর করা হবে না" এর অর্থ যদি আপনি "একবারে একাধিকবার ডাকা হয় তখন কিছুই করেন না", আপনি একটি বন্ধন তৈরি করতে পারেন:
var something = (function() {
var executed = false;
return function() {
if (!executed) {
executed = true;
// do something
}
};
})();
something(); // "do something" happens
something(); // nothing happens
@ ভ্লাদলুফের মন্তব্যের উত্তরে (এখন মুছে ফেলা হয়েছে): বিশ্বব্যাপী ভেরিয়েবলের সাথে অন্য কোডগুলি "মৃত্যুদন্ডপ্রাপ্ত" পতাকার মানটি নির্ধারণ করতে পারে (আপনি যে নামটিই বেছে নেবেন)। বন্ধ হওয়ার সাথে সাথে অন্য কোডের এটি করার কোনও উপায় নেই, হয় দুর্ঘটনাক্রমে বা ইচ্ছাকৃতভাবে।
অন্যান্য উত্তরের হিসাবে এখানে উল্লেখ করা হয়েছে, কয়েকটি লাইব্রেরিতে (যেমন অ্যান্ডস্কোর এবং রামদা ) একটি সামান্য ইউটিলিটি ফাংশন রয়েছে (সাধারণত নামকরণ once()
[*] ) যা একটি ফাংশনটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং সরবরাহ করে ফাংশনটি ঠিক একবারে কল করে এমন অন্য ফাংশন ফিরিয়ে দেয়, তা নির্বিশেষে অনেকবার ফিরে ফাংশন বলা হয়। ফেরত ফাংশন সরবরাহ করা ফাংশন দ্বারা প্রথমে ফিরে আসা মানকেও ক্যাশে করে এবং পরবর্তী কলগুলিতে এটি প্রদান করে।
তবে, আপনি যদি এই জাতীয় কোনও তৃতীয় পক্ষের লাইব্রেরি ব্যবহার না করে থাকেন তবে তবুও এই জাতীয় কোনও ইউটিলিটি ফাংশন চান (উপরে বর্ণিত নোকাস সমাধানের চেয়ে) এটি প্রয়োগ করা যথেষ্ট সহজ। আমি যে দুর্দান্ত সংস্করণটি দেখেছি তা হ'ল ডেভিড ওয়ালশ পোস্ট করেছেন :
function once(fn, context) {
var result;
return function() {
if (fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result;
};
}
আমি পরিবর্তন fn = null;
করতে ঝোঁক হবে fn = context = null;
। context
একবারে কোনও রেফারেন্স ধরে রাখার জন্য বন্ধের কোনও কারণ নেই fn
।
[*] তবে সচেতন থাকুন যে, অন্যান্য লাইব্রেরিগুলিতে, যেমন এই ডুপ্লাল এক্সটেনশন যেমন জিকুয়েরিতে , একটি ফাংশন নামের থাকতে পারে once()
যা কিছু আলাদা করে।