ফাংশন

একটি ফাংশন হল একটি মডুলার, পুনঃব্যবহারযোগ্য বিবৃতিগুলির ব্লক যা সম্পর্কিত কার্যগুলির একটি সেট সম্পাদন করতে ব্যবহৃত হয়, যেমন ফাংশনে প্রদত্ত আর্গুমেন্টের উপর ভিত্তি করে একটি মান গণনা করা এবং ফেরত দেওয়া। সমস্ত অ-আদিম মানের মত, ফাংশন হল বস্তু। এগুলি অনন্য বস্তু যেগুলিকে কোড চালানোর জন্য বলা যেতে পারে, আর্গুমেন্ট আকারে ডেটা পাস করা যেতে পারে এবং একটি মান ফেরত দিতে পারে

ফাংশনগুলিকে " প্রথম শ্রেণীর " অবজেক্ট হিসাবে ভাবা হয়, যার অর্থ তাদের অনন্য আচরণ সত্ত্বেও, সেগুলি অন্য জাভাস্ক্রিপ্ট অবজেক্টের মতো একই প্রসঙ্গে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, একটি ফাংশন একটি ভেরিয়েবলের জন্য বরাদ্দ করা যেতে পারে, অন্য ফাংশনের জন্য একটি আর্গুমেন্ট হিসাবে পাস করা যেতে পারে এবং অন্যান্য ফাংশন দ্বারা ফেরত দেওয়া যেতে পারে।

function myFunction() {
   console.log( "This is my function." );
};

একটি বস্তুর একটি বৈশিষ্ট্য হিসাবে সংজ্ঞায়িত একটি ফাংশন সাধারণত একটি "পদ্ধতি" বলা হয়. var ` ব্যবহার করে ঘোষিত ভেরিয়েবলের মতো, একটি এনক্লোসিং ফাংশনের বাইরে তৈরি ফাংশন ঘোষণাগুলিকে মেথড হিসেবে গ্লোবাল অবজেক্টে যুক্ত করা হয়।

ফাংশন ঘোষণা

একটি ফাংশন ঘোষণা (এটিকে "ফাংশন স্টেটমেন্ট" বা "ফাংশন ডেফিনিশন"ও বলা হয়) একটি নামযুক্ত ফাংশন তৈরি করে যা এর ধারণকৃত সুযোগে অন্য কোথাও আহ্বান করা যেতে পারে। ফাংশন ঘোষণায় একটি শনাক্তকারী অনুসরণ করে function কীওয়ার্ড, বন্ধনীতে আবদ্ধ কমা-বিভাজিত পরামিতিগুলির একটি তালিকা এবং "ফাংশন বডি" নামে একটি ব্লক স্টেটমেন্ট থাকে । আপনি প্রায়শই ফাংশন ঘোষণার সম্মুখীন হবেন যা সেমিকোলন দিয়ে শেষ হয় না; যেহেতু একটি ফাংশন ঘোষণা একটি বিবৃতি, অনুগামী সেমিকোলন ASI দ্বারা অনুমান করা যেতে পারে।

function myFunction() {
   console.log( "This is my function." );
};

myFunction();
> "This is my function."

জাভাস্ক্রিপ্টের প্রারম্ভিক ডিজাইনের সিদ্ধান্তগুলির একটি হোল্ডওভার হিসাবে, ফাংশন ঘোষণাগুলি var এর সাথে ঘোষিত ভেরিয়েবলগুলির মতো একই উত্তরাধিকার উত্তোলন আচরণের সাপেক্ষে, যার অর্থ একটি ফাংশন ঘোষণা তার সুযোগের শীর্ষে উত্তোলন করা হয়, এবং ঘোষণার আগে বলা যেতে পারে ফলস্বরূপ, সেই সুযোগটি কঠোর মোড দ্বারা নিয়ন্ত্রিত হোক বা না হোক:

"use strict";
{
    myFunction();
    function myFunction() {
        console.log( "This is my function." );
    };
}
> "This is my function."

কঠোর মোডের বাইরে, ফাংশন ঘোষণা জাভাস্ক্রিপ্টের লিগ্যাসি স্কোপিং আচরণ ব্যবহার করে, যার অর্থ একটি ফাংশন ঘোষণা তার সবচেয়ে কাছের এনক্লোসিং ফাংশনের জন্য স্কোপ করা হয়:

function myFunction() {
    function myNestedFunction() {
        console.log( "This is my nested function." );
    }
    myNestedFunction();
};

myFunction();
> "This is my nested function."

myNestedFunction();
>Uncaught ReferenceError: myNestedFunction is not defined

কঠোর মোডে , ফাংশন ঘোষণাগুলিকে তাদের নিকটতম ঘেরা ব্লকে স্কোপ করা হয়, যেমন let বা const ব্যবহার করে ঘোষিত ভেরিয়েবলের সাথে।

"use strict";
{
    function myFunction() {
        console.log( "This is my function." );
    };
}

myFunction();
> Uncaught ReferenceError: myFunction is not defined

ফাংশন কলিং

ভেরিয়েবলের মতো, একটি ফাংশন ঘোষণা করার সময় ব্যবহৃত শনাক্তকারী একটি মানের জন্য একটি প্রতীকী নাম হিসাবে কাজ করে। শুধুমাত্র শনাক্তকারী দ্বারা একটি ফাংশন উল্লেখ করা শুধুমাত্র ফাংশন অবজেক্ট প্রদান করে, এবং এতে থাকা ফাংশনটি কার্যকর করে না:

function myFunction() {
   console.log( "This is my function." );
};

myFunction;
> myFunction() {
   console.log( "This is my function." );
}

ফাংশন বডির ভিতরে কোডটি চালানোর জন্য, মিলিত বন্ধনীর জোড়া দিয়ে ফাংশনের নাম অনুসরণ করে ফাংশনটিকে কল করুন (বা আহ্বান করুন )

function myFunction() {
    console.log( "My function has been executed." );
}

myFunction();
> "My function has been executed."

ফাংশনের সংজ্ঞার পরামিতিগুলি মানের জন্য স্থানধারক ভেরিয়েবল হিসাবে কাজ করে যা ফাংশনকে কল করার সময় ফাংশন বডিতে পাস করা যেতে পারে। একটি ফাংশন কল করা হলে বন্ধনীর মানগুলি হল "আর্গুমেন্টস" (যদিও আপনি কিছু ডকুমেন্টেশনে আর্গুমেন্ট এবং প্যারামিটার উভয়ই বর্ণনা করতে "আর্গুমেন্ট" ব্যবহার করতে পারেন):

function myFunction( myParameter ) {
   console.log( `The value is: ${ myParameter }.` );
};

myFunction( "this string" );
> "The value is: this string."

যদি একটি প্রত্যাশিত আর্গুমেন্ট বাদ দেওয়া হয়, ফলাফলের প্যারামিটারে একটি undefined মান থাকে, কারণ প্যারামিটারটি ফাংশন বডিতে ঘোষণা করা হয় কিন্তু একটি মান দিয়ে আরম্ভ করা হয় না:

function myFunction( myParameter ) {
   console.log( `The value is: ${ myParameter }.` );
};

myFunction();
> "The value is: undefined."

আপনি ডিফল্ট প্যারামিটার মানগুলিকে শুরু করে সেট করতে পারেন যেভাবে আপনি একটি ভেরিয়েবল শুরু করবেন: একটি অ্যাসাইনমেন্ট অপারেটর ( = ) একটি মান অনুসরণ করে। যদি আপনি পরে সেই ফাংশনের জন্য একটি আর্গুমেন্ট নির্দিষ্ট করেন, সেই নতুন মানটি ডিফল্ট মানকে ওভাররাইড করে:

function myFunction( myParameter = "omitted" ) {
   console.log( `The value is: ${ myParameter }.` );
};

myFunction( "this string" );
> "The value is: this string."

myFunction();
> "The value is: omitted."

একটি নন-অ্যারো ফাংশনের বডিতে একটি শূন্য-সূচীযুক্ত, অ্যারে -মত arguments অবজেক্টের অ্যাক্সেস রয়েছে যাতে আর্গুমেন্ট হিসাবে পাস করা যেকোন মান রয়েছে, ফাংশনের সংজ্ঞা প্যারামিটারগুলি নির্দিষ্ট করে বা না করে:

function myFunction() {
   console.log( arguments );
};

myFunction( 3, true, "My string" );
> Arguments { 0: 3, 1: true, 2: "My string", … }

বৈচিত্র্যময় ফাংশন

arguments অবজেক্ট আপনাকে মৌলিক বৈচিত্র্যময় ফাংশন তৈরি করতে দেয়, যা পরিবর্তনশীল সংখ্যক আর্গুমেন্ট গ্রহণ করতে পারে:

function myFunction() {
    let result = "";
    for (let i = 0; i < arguments.length; i++) {
        result += arguments[i] + " - ";
    }
    console.log( result );
};

myFunction( "My first string", "My second string", "my third string" );\
> "My first string - My second string - my third string - "

যাইহোক, বৈচিত্র্যময় ফাংশনগুলির এই পদ্ধতিটি আধুনিক জাভাস্ক্রিপ্ট বিকাশে খুব কমই ব্যবহৃত হয়। এটি আরও আধুনিক এবং পঠনযোগ্য বিশ্রাম প্যারামিটার সিনট্যাক্স ব্যবহার করা আরও সাধারণ, যা স্পষ্টভাবে নির্দিষ্ট করা ছাড়া যেকোন আর্গুমেন্ট ধারণকারী একটি অ্যারে হিসাবে শুরু করা একটি নামযুক্ত প্যারামিটার তৈরি করে:

function myFunction( mySeparator, ...myStrings ) {
  console.log( myStrings.join( mySeparator ) );
};

myFunction( " - ", "My first string", "My second string", "my third string" );
> "My first string - My second string - my third string"

parameter বাইন্ডিংয়ের বিপরীতে, বাকি প্যারামিটার সিনট্যাক্স তীর ফাংশন প্যারামিটারের সাথে প্রত্যাশিতভাবে কাজ করে:

function myOuterFunction() {
    let myInnerArrowFunction = ( ...myParams ) => {
        console.log( myParams[ 0 ] );
    }
    myInnerArrowFunction( true );
};

myOuterFunction( false );
> true

let myArrowFunction = ( ...myParams ) => {
    console.log( myParams[ 0 ] );
};

myArrowFunction( true );
> true`
``