হ্যাঁ এটি ডিফল্ট প্যারামিটার হিসাবে উল্লেখ করা হয়
ডিফল্ট ফাংশন প্যারামিটারগুলি কোনও মান বা অপরিজ্ঞাত পাস না হলে ডিফল্ট মানগুলির সাথে প্রথাগত পরামিতিগুলির সূচনা করতে দেয়।
বাক্য গঠন:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
বর্ণনা:
ডিফল্ট ফাংশনগুলির প্যারামিটারগুলি পূর্বনির্ধারিত হয়ে যায় তবে, পরিস্থিতিতে এটির জন্য আলাদা ডিফল্ট মান সেট করতে কার্যকর হতে পারে। এটি যেখানে ডিফল্ট প্যারামিটারগুলি সহায়তা করতে পারে।
অতীতে, ডিফল্ট নির্ধারণের জন্য সাধারণ কৌশলটি ছিল ফাংশনের শরীরে প্যারামিটারের মানগুলি পরীক্ষা করা এবং সেগুলি অপরিবর্তিত থাকলে মান নির্ধারণ করা। যদি কলটিতে কোনও মান সরবরাহ না করা হয় তবে এর মানটি সংজ্ঞায়িত হবে। প্যারামিটার অপরিশোধিত না হয়েছে তা নিশ্চিত করার জন্য আপনাকে শর্তযুক্ত চেক সেট করতে হবে
ES2015 এ ডিফল্ট পরামিতিগুলির সাথে, ফাংশন বডিটিতে চেক আর প্রয়োজন নেই। এখন আপনি কেবল ফাংশন মাথায় একটি ডিফল্ট মান রাখতে পারেন।
পার্থক্যের উদাহরণ:
// OLD METHOD
function multiply(a, b) {
b = (typeof b !== 'undefined') ? b : 1;
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
// NEW METHOD
function multiply(a, b = 1) {
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
বিভিন্ন সিনট্যাক্স উদাহরণ:
প্যাডিং অপরিজ্ঞাত বনাম অন্যান্য মিথ্যা মানগুলি:
কল করার সময় মানটি স্পষ্টভাবে সেট করা থাকলেও সংখ্যা যুক্তির মানটি ডিফল্ট হয়।
function test(num = 1) {
console.log(typeof num);
}
test(); // 'number' (num is set to 1)
test(undefined); // 'number' (num is set to 1 too)
// test with other falsy values:
test(''); // 'string' (num is set to '')
test(null); // 'object' (num is set to null)
কল সময়ে মূল্যায়ন:
ডিফল্ট আর্গুমেন্টটি কল সময়ে মূল্যায়ন হয়, সুতরাং অন্য কয়েকটি ভাষার মতো নয়, প্রতিবার ফাংশনটি বলা হওয়ার সময় একটি নতুন অবজেক্ট তৈরি করা হবে।
function append(value, array = []) {
array.push(value);
return array;
}
append(1); //[1]
append(2); //[2], not [1, 2]
// This even applies to functions and variables
function callSomething(thing = something()) {
return thing;
}
function something() {
return 'sth';
}
callSomething(); //sth
ডিফল্ট প্যারামিটারগুলি পরে ডিফল্ট প্যারামিটারগুলিতে পাওয়া যায়:
ইতিমধ্যে সম্মুখীন প্যারামগুলি পরে ডিফল্ট প্যারামিটারগুলিতে উপলব্ধ
function singularAutoPlural(singular, plural = singular + 's',
rallyingCry = plural + ' ATTACK!!!') {
return [singular, plural, rallyingCry];
}
//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural('Gecko');
//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural('Fox', 'Foxes');
//["Deer", "Deer", "Deer ... change."]
singularAutoPlural('Deer', 'Deer', 'Deer peaceably and respectfully \ petition the government for positive change.')
ফাংশন বডি ভিতরে ফাংশন সংজ্ঞায়িত:
গেকো 33 (ফায়ারফক্স 33 / থান্ডারবার্ড 33 / সিমনকি 2.30) এ পরিচয় করিয়ে দেওয়া হয়েছে। ফাংশন বডিতে ঘোষিত ফাংশনগুলিকে ডিফল্ট পরামিতিগুলির মধ্যে উল্লেখ করা যায় না এবং একটি রেফারেন্স এয়ারার (বর্তমানে স্পাইডারমোনকিতে টাইপআরার, বাগ 1022967 দেখুন) নিক্ষেপ করা যায় না। ডিফল্ট প্যারামিটারগুলি সর্বদা প্রথমে কার্যকর করা হয়, ফাংশন বডিটির ভিতরে ফাংশন ঘোষণাগুলি পরে মূল্যায়ন করে ate
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
ডিফল্ট পরামিতিগুলির পরে খেলাপি ছাড়াই পরামিতি:
গেকো 26 এর আগে (ফায়ারফক্স 26 / থান্ডারবার্ড 26 / সিমনকি 2.23 / ফায়ারফক্স ওএস 1.2), নিম্নলিখিত কোডটির ফলে একটি সিনট্যাক্সেরর হয়েছিল। এটি বাগ 777760 এ স্থির করা হয়েছে এবং পরবর্তী সংস্করণগুলিতে প্রত্যাশার মতো কাজ করে। ডিফল্ট ছাড়াই পরের প্যারামিটারগুলি থাকলেও প্যারামিটারগুলি এখনও বাম থেকে ডানে সেট করা আছে ডিফল্ট পরামিতিগুলিকে ওভাররাইট করে।
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
ডিফল্ট মান অ্যাসাইনমেন্ট সহ তৈরি করা প্যারাম্যাট:
আপনি ডিস্ট্রাকচারিং অ্যাসাইনমেন্ট নোটেশন সহ ডিফল্ট মান অ্যাসাইনমেন্ট ব্যবহার করতে পারেন
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
return x + y + z;
}
f(); // 6
function defaultFor(arg, val) { return typeof arg !== 'undefined' ? arg : val; }
এবং তারপরে আপনি এটিকে কল করতে পারেনa = defaultFor(a, 42);