Basic Function Bengali JavaScript Series ⇾ Chapter Eight
function?, define a function, invoke a function, arguments and parameter, argument object in JavaScript function, return statement, expression

♗ Love To Play With → JavaScript & NodeJS.
✢ Interested → Web & Backend Development.
↯ Current Stack → MERN Stack
আমরা মোটামুটি ভাবে সমস্ত কোর ফিচার গুলো এক্সপ্লোর করে ফেলেছি । এই পর্বে আমরা দেখব প্রোগ্রামিং এর most importent পিলার function নিয়ে ।কিভাবে আমরা ফাঙ্কশন লিখতে পারি জাভাস্ক্রিপ্ট এ ।কিভাবে সেটাকে invoke বা রিটার্ন স্টেটমেন্ট লিখতে পারি ।এই সব বেসিক বিষয় গুলোই জানব । আমরা ফাঙ্কশন পুরোটা cover করব না ,তবে এই চ্যাপ্টার এর পরে থেকেই আমাদের ফাঙ্কশনাল প্রোগ্রামিং এর জার্নি শুরু ।সেখানেই ডিটেলস এ আলোচনা করা হবে অ্যাডভান্স টপিক গুলো নিয়ে ।
এই চ্যাপ্টার এ যা কিছু থাকছে :
What is Function
How to define a Function
How to invoke a Function
Arguments and parameters of a Function
Argument Object in Javascript Function
How to return Anything from a Function
Function Expressions In Javascript
Inner Function in Javascript
What is Function Scoping In Javascript
উপরে দেয়া প্রত্যেকটা সেকশন আমরা আলাদা আলাদা ভাবে আলোচনা করব ।
059. What is Function :
তোমায় যদি আমি সহজ বাংলা ভাষায় বলি ফাঙ্কশন হলো একটা মেশিন ।যার মূলত ৩ টা পার্ট থাকে ইনপুট ,আউটপুট আর প্রসেসিং ।
- input
ইনপুট পার্ট এ আমরা যে কোন ডাটা দিয়ে দেয় ।সেই ডাটা এর উপর ভিত্তি করে বা না করে প্রসেসিং পার্ট এ যায় ।
- processing
প্রসেসিং পার্ট এ ডাটা বা যাকিছু দিয়ে দেয়া হয় তা দিয়ে কিছু একটা করে । যারা ফাঙ্কশন বানাবে মানে ডেভেলপার তারা জানবে কি করা হবে তবে যারা ব্যবহার করবে তারা জানবে না ,কি হচ্ছে ।
- output
এর পরেই আসে শেষের পার্ট যেটাকে আমরা আউটপুট বলছি । ডাটা দিলাম ডাটা প্রসেস হলো এবার finally কিছু একটা নতুন আউটপুট দিবে ।
ফাঙ্কশনের দুইজন user থাকে ।যে ফাঙ্কশন create করবে এবং যে ফাঙ্কশন কল করবে ।
ধর তুমি কোনো থার্ট পার্টি লাইব্রেরি ব্যবহার করেছ যা দিয়ে date বের করবা ।সে ক্ষেত্রে তুমি হচ্ছ user ।আর যারা লাইব্রেরি তৈরী করেছে বা ফাঙ্কশন তৈরী করেছে তারা creator ।তুমি কিন্তু সেখানে user হয়ে জানতে পারবে না ফাঙ্কশনের মধ্যে কি হচ্ছে । ফাঙ্কশনের এই ব্যাপারটাকে বলাহয় অবস্ট্রাক্শন । তবে আমরা যেহেতু শিখছি এখানে আমরা creator আমরাই user ।
ফাঙ্কশন এর মূল কাজ হিসেবে ধরাহয় repiteted কাজ গুলোকে reduce করা ।
তোমার কাছে কি কথাটা শোনা শোনা লাগছে ? maybe আমরা array এর ব্যাপারেও একই কথা বলেছিলাম । তাহলে কি ফাঙ্কশন লুপ এর মত ?
উত্তরটা হবে একদমই না লুপ চলতেই থাকে যতক্ষণ না তুমি ব্রেক করে দাও ।কিন্তু ফাঙ্কশন এর কন্ট্রোল আমাদের মানে ডেভেলপার এর হাতেই থাকবে ।যখন ইচ্ছা যেখানে ইচ্ছা কল করতে পারব ।
var date = new Date()
date.getFullYear()
আমরা ডেট অবজেক্ট থেকে getFullYear ফাঙ্কশন / মেথড কল করে বর্তমান বছর দেখতে পারি । এবং আমরা যতবার খুশি কল করে যে কোন জায়গায় ব্যাবহার করতে পারি ।বার বার আমাদের year বের করার লজিক লেখার দরকার হচ্ছে না। এই যে বার বার লজিক লেখার দরকার হলো না তাই বলা হয়েছে repiting task reduce বা dry । আর ফাঙ্কশন এর সুবিধা হলো কন্ট্রোল থাকে user এর হাতে ।
060. How to Define a Function :
তাহলে একটা ফাঙ্কশন কিভাবে আমরা define করতে পারি ?
জাভাস্ক্রিপ্ট এ ফাঙ্কশনকে ২ /৩ ভাবে define করা যায় ।এই সেকশন এ আমরা সব থেকে সহজ ফাঙ্কশন define করা দেখব ।প্রত্যেকটা স্টেটমেন্ট এর যেমন কিছু রুলস বা শর্ত থাকে তেমনি ফাঙ্কশন এর ক্ষেত্রেও আছে ।
যেমন ধরি simple ফাঙ্কশন এর ক্ষেত্রে function কীওয়ার্ড উল্লেখ থাকা । ফাঙ্কশন কে কল করার জন্য একটা নাম থাকা এবং এর একটা body বা ব্লক অফ কোড থাকা যেখানে প্রসেস হবে ।
সিন্টেক্স বা কাঠাম দেখতে :
function name(parameter1, parameter2, parameter3) {
// code to be executed
}
খেয়াল করে দেখো function কীওয়ার্ড name এবং body সব এ রয়েছে । অবশ্য পেরামিটার আছে সেটা আমরা পরে আলোচনা করছি ।তুমি চাইলে পেরামিটার ছাড়াও শুধু () দিয়ে দিতে পার । () first ব্রাকেট দেখেই আমাদের জাভাস্ক্রিপ্ট কম্পাইলার একটা ফাঙ্কশন চিনে থাকে ।
function add() {
var a = 10;
var b = 20;
console.log(a + b);
}
function sub() {
var c = 20;
var d = 10;
console.log(c - d);
}
আমরা উপরে কোড এ দুইটা ফাঙ্কশন ডিক্লের করেছি যার কাজ হচ্ছে যোগ করা এবং বিয়োগ করা ।
এই দুইটি আলাদা আলাদা ফাঙ্কশন এদেরকে আমরা চাইলে যতবার খুশি আলাদা আলাদা কল করতে পারি ।
061. How to Invoke Function:
এবার আমাদের কাজ হবে উপরের ফাঙ্কশন গুলোকে invoke বা call করা । তোমাদের কাছে হয়তো invoke কথাটা নতুন মনে হচ্ছে ।বস্তুত পক্ষে কোন ফাঙ্কশন কে কল করা বা ব্যবহার করাকেই ফাঙ্কশন invoke বলাহয় ।
তুমি ফাঙ্কশন এর নাম দিয়েছ এবং একটা ফাঙ্কশন create করেছ।কিন্তু এই ফাঙ্কশন এখনো পর্যন্তও আমাদের কোন আউটপুট দিবে না ।কারণ তুমি কোথাও নাম ধরে ডেকে বলনি কি কাজ করতে হবে ।
তুমি চাইলে কোড রান করে দেখতে পার :

খালি এসেছে ।আমরা কিন্তু প্রত্যেকটা ফাঙ্কশন এ কনসোল লগ করতে বলেছিলাম ।কিন্তু করে নি ।কারণ আমরা invoke বা কল করিনি ।ফাঙ্কশন সাধারণত নিজে নিজে কল হয় না ।যখন ক্লায়েন্ট বা ডেভেলপার কল করে ঠিক তখনি কল হবে ।তাই এর আগে আমরা বলেছি ফাঙ্কশন আমাদের কন্ট্রোল দেয় ।
ফাঙ্কশক invoke করা খুব সহজ ।প্রথমেই ফাঙ্কশন এর নাম তারপরে ফার্স্ট ব্রাকেট () ব্যাস এভাবেই একটা ফাঙ্কশন কল হয়ে যাবে ।তুমি যখনি ফাঙ্কশন নাম লিখবে তখন কল করোনি কিন্তু যখন তার সামনে () ফার্স্ট ব্রাকেট দিকে ফাঙ্কশন বুঝে যাবে তাকে ডাকা হচ্ছে ।তখন যে ফাঙ্কশন invoke করা হবে সে কল হবে ও ফাঙ্কশন body এর কোড এক্সিকিউট হবে ।
function add() {
var a = 10;
var b = 20;
console.log(a + b);
}
function sub() {
var c = 20;
var d = 10;
console.log(c - d);
}
add();
sub();
আউটপুট :

দেখো add ফাঙ্কশন এর জন্য ৩০ এবং sub ফাঙ্কশন এর আউটপুট ১০ এসেছে ।
এবারে আমরা একটা নতুন ফাঙ্কশন বানাব এবং তা ব্যবহার করব ।
ধর তোমার কাছে ২০ টা কলা আছে সেখান থেকে ৫টা কলা বিয়োগ করে, ৫ টা আপেল সাথে গুন্ করতে হবে ।এবং তা ১০ বার প্রিন্ট করতে হবে ।
তাহলে আমাদের কোড হবে :
function hisabNikas() {
var kola = 20;
var apple = 5;
var kolaBiog = kola - 5;
var result = kolaBiog * apple;
console.log("Total Fruits : ", result);
}
hisabNikas();
hisabNikas();
hisabNikas();
hisabNikas();
hisabNikas();
hisabNikas();
hisabNikas();
hisabNikas();
hisabNikas();
hisabNikas();
এবাভে করে আমরা পরপর ১০ বার কল করতে পারি ।
আউটপুট :

অথবা আমরা চাইলে লুপ এর মাধ্যমে ১০ বার ফাঙ্কশন কল করতে পারি :
function hisabNikas() {
var kola = 20;
var apple = 5;
var kolaBiog = kola - 5;
var result = kolaBiog * apple;
console.log("Total Fruits : ", result);
}
for (var i = 1; i <= 10; i++) {
hisabNikas();
}
তুমি রান করে দেখো একই আউটপুট আসবে ।তাহলে আমরা বুজতে পারলাম আমরা চিলি যে কোন জায়গায় ফাঙ্কশন কে কল করতে পারি ।
062. Arguments and Parameter of a Function:
আমরা এখন জানি কিভাবে ফাঙ্কশন ডিক্লের করতেহয় এবং তা ব্যবহার করতে হয় ।
ধর তুমি একটা ফাঙ্কশন লিখলে যেটা সংখ্যা যোগ করে :
function add() {
var a = 20;
var b = 50;
console.log(a + b);
}
এবারে ডিফাইন করা ফাঙ্কশন এর নাম ধরে ডাক দিব মানে invoke করব ।ধর আমরা মোট ১০ বার কল করলাম :
add();
add();
add();
add();
add();
add();
add();
add();
add();
add();
আউটপুট এ আসলো যোগফল গুলো । বার বার একই যোগফল এসেছে ।
এটা আমাদের ফাঙ্কশন কে ডায়নামিক করল না ।আমরা তো সবসময় একই রেজাল্ট চাই না ।আলাদা আলাদা কল এ আলাদা আলাদা রেজাল্ট চাই ।ঠিক এখানেই আসে peramiter এর কনসেপ্ট ।
এই পেরামিটার সহজ বাংলায় বলতে গেলে একটা ভেরিএবল যেখানে আমরা ডাটা দিব ।সেই ভেরিএবলে আমরা যে কোন ডাটা দিতে পারি আমাদের ফাঙ্কশন এর উপর ভিত্তি করে ।আর পেরামিটার বসাতে হয় ফাঙ্কশন ডিক্লারেশন এর যে () ফার্স্ট ব্রাকেট আছে সেখানে function add() । এবং আমরা body এর মধ্যে পেরামিটার নিয়ে যা খুশি করতে পারি ।
function add(a , b) {
var result = a+b
console.log(result);
}
দেখো পেরামিটার এ var কীওয়ার্ড লাগে না । আর যেহেতু আমরা দুইটা পেরামিটার নিয়েছি তাই সেপারেট করছি কমা দিয়ে ।এর পর বডি এর মধ্যে result নামে ভ্যারিয়েবল নিয়ে তাতে a এবং b যোগ করছি ।আর কনসোল লগ করেছি result কে ।আমরা এই পেরামিটার ব্যবহার করার উদেশ্য হচ্ছে আমরা বাইরে থেকে ফাঙ্কশন এ ডাটা পাঠাব ।
তাহলে এবার প্রশ্ন হচ্ছে ডাটা বা এই ভ্যারিয়েবল গুলোর ভ্যালু কোথায় দিব ?
আমরা এই ভ্যালু গুলো provide করব যখন ফাঙ্কশন invoke বা কল করব ।এই ভ্যালু দিয়ে দেয়ার নাম হচ্ছে argument pass করা।
add(4,5);
add(10,30);
add(20,21);
add(5,6);
add(8,4);
add(1,4);
add(5,6);
add(5,7);
add(9,6);
add(2,3);
invocation এর মধ্যে আমরা আলাদা আলাদা argument pass করেছি ।মানে ডায়নামিক ভাবে ভ্যালু দিয়েছি । যেহেতু আমাদের পেরামিটার দুইটা তাই দুইটা আর্গুমেন্ট দিয়েছি ।যার a পেরামিটার এর ভ্যালু হবে প্রথম আর্গুমেন্ট আর b পেরামিটার এর ভ্যালু হবে দ্বিতীয় আর্গুমেন্ট ।আর আলাদা করার কাজটা , কমা ব্যবহার করে করেছি ।
দেখি আউটপুট কি আসে :

look at that আমাদের আর্গুমেন্ট এর উপর ভিত্তি করে ডিফারেন্ট রেজাল্ট আউটপুট দিচ্ছে ।
problem:
তুমি এইটা আমার কোড না দেখে করার চেষ্টা কর ।
ধর ৩ তা array আছে
var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];
var arr3 = [7, 8, 9];
তোমার কাজ হচ্ছে ফাঙ্কশন ব্যবহার করে ডাইনামিক ভাবে সবগুলোর array এর এলিমেন্ট এর যোগফল বের করা ।
সমাধান ও আউটপুট :

না দেখে করার চেষ্টাটা জরুরি ।
063. Argument Object in JavaScript Function :
আমরা এর আগে জেনেছি parameter এবং argument সম্পর্কে ।আমরা জানি ফাঙ্কশন ডিক্লের এর সময় ফানেল () এর মধ্যে যে ভ্যারিয়েবল নেয়াহয় সেটাই পেরামিটার এবং সেটা আমরা ফাঙ্কশন এর বডি এর মধ্যে ব্যবহার করতে পারি ।
এই সেকশন এ আমরা জানব argument সম্পর্কে ।আমরা জানি ফাঙ্কশন invoke বা কল করার সময় provide করে থাকি । আর্গুমেন্ট কে আমরা চাইলে ফাঙ্কশন এর মধ্যেও acess নিতে পারি, মানে তুমি যখনি একটা ফাঙ্কশন ডিক্লের করবে তখনি আর্গুমেন্ট অবজেক্ট পেয়ে যাবে যা ফাঙ্কশন body এর মধ্যে ব্যবহার করতে পারবে । সে ক্ষেত্রে আমরা arguments কীওয়ার্ড ব্যবহার করব যা জাভাস্ক্রিপ্ট আমাদের দিয়ে থাকে ।
function arg() {
console.log(arguments);
}
arg();
আউটপুট :

দেখো আমাদের আউটপুট দিয়েছে array আকারে এবং একটা empty object দিয়ে । কিন্তু যখনি আমরা আমাদের ফাঙ্কশন invoke এ আর্গুমেন্টস ডাটা দিব ,element ডিটেলস আকারে এই arguments অবজেক্ট এ পাব। তবে আমরা আর্গুমেন্ট অবজেক্ট কে array এর মত ব্যবহার করতে পারব । মূলত arguments অবজেক্ট ও না আবার array ও না ।arguments কে বলাহয় array like ডাটাস্ট্রাকটার ।
function arg() {
console.log(arguments);
}
arg(1, 3, 4);
আউটপুট :

আগেই বলেছি arguments একটা array like ডাটাস্ট্রাকচার তাই আমরা চাইলে এর এলিমেন্ট গুলোকে object মেথড বা array মেথড দিয়ে access করতে পারি ।
function arg() {
// "array Like"
console.log("array Like Output");
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
// "Object Like"
console.log("Object Like Output");
for (var i of arguments) {
console.log(i);
}
}
arg(1, 3, 4);
আউটপুট :

তবে arguments অবজেক্ট ধরে আমাদের কাজ করার সমস্যা হচ্ছে আমরা স্পেসিফিক ভ্যারিয়েবল ধরে কাজ করতে পারব না ,আমাদের ইনডেক্স নম্বর এর উপর ভরসা করতে হবে ।সেটা খুব ভালো হবে না ।তাই আমরা পেরামিটার ব্যবহার করেই মূলত কাজ করব ।
তবে আমাদের যদি এমন পরিস্থিতির সমুক্ষিন হতে হয় যেখানে আমাদের invoke / কল করা আর্গুমেন্ট জানা নাই । সেক্ষেত্রে arguments অবজেক্ট খুব কাজে আসে ।
- How to Return Anything from a Function :
আমরা যখন কোন কিছুকে পরবর্তীতে ব্যবহার করতে চাই সে ক্ষেত্রে সেই ডাটা কে ভ্যারিয়েবল এ স্টোর করে রাখি ।ঠিক তেমনি ভাবে আমরা যখন ফাঙ্কশন লিখি তার মধ্যে অপারেশন চালানোর পরে ডাটা কে পরে ব্যবহার করতে হতে পারে ।
এখন পর্যন্ত আমরা ফাঙ্কশন এর মধ্যেই কনসোল লগ করেছি ।কিন্তু রিয়েল ওয়ার্ল্ড সফটওয়্যার এ আমরা কনসোল লগ না করে ডাটা কে আলাদা আলাদা পারপাস এ ব্যবহার করব ।আর এ জন্য আমাদের return করার দরকার হয়েথাকে ।
ধর আমাদের কাছে add নামে ফাঙ্কশন আছে ।
function add(a,b) {
var result = a+b
console.log(result)
}
add(10,20)
এই ফাঙ্কশন আমাদের শুধু কনসোল লগ করে দিতে পারে ।কিন্তু আমরা চাচ্ছি আমরা x ভ্যারিয়েবল এর মধ্যে add ফাঙ্কশন এর রেজাল্ট স্টোর করতে ।দেখাযাক কি হয় :
function add(a, b) {
var result = a + b
console.log(result)
}
var x = add(10, 20)
console.log(x)
x ভ্যারিয়েবল এ স্টোর করেছি এবং টেস্টিং এর জন্য x কে আমরা কনসোল লগ করেছি ।
আউটপুট আসবে :

ফাঙ্কশন এর কনসোল লগ ৩০ আউটপুট দিয়েছে কিন্তু ভ্যারিয়েবল এ স্টোর করা x আমাদের undifined আউটপুট দিচ্ছে । এখন আমরা undifine নিয়ে তো আর কাজ করতে পারব না ।ঠিক এখানেই আমাদের solutuion দিচ্ছে return statement ।সব গুলো অপারেশন চালানোর পরে ফাইনাল রেজাল্ট পাওয়ার জন্য ফাঙ্কশন কে আমরা return করে দিব ।
function add(a, b) {
var result = a + b
return result
}
var x = add(10, 20)
console.log(x)
আমরা জাস্ট return কথাটা লিখে দিলেই হবে যা রিটার্ন করতে চাই তার আগে ।এবারে যদি আউটপুট দেখো :

এবারে আমাদের লাস্ট রেজাল্ট আউটপুট দিয়েছে এবং সেটা x ভ্যারিয়েবল থেকেই দিয়েছে ।আমরা x এর ভ্যালু কে চাইলে যে কোন কাজে লাগাতে পারি ।
এই রিটার্ন হচ্ছে ফাঙ্কশন এর আউটপুট সেকশন সব কাজ করার পরে লাস্ট এ গিয়া রিটার্ন করে দিবে ফাঙ্কশন ।অবশ্যই একটা ব্যাপার মাথায় রাখতে হবে return করার পরে আর কোন কোড ফাঙ্কশন exicute করবে না ।
065. Function Expressions in Javascript :
জাভাস্ক্রিপ্ট এ ফাঙ্কশন একটা ভ্যালু এর মত করে act করতে পারে । মানে আমরা ফাঙ্কশন কে ভ্যারিয়েবল এ assign করতে পারি ।
var addition = function (a, b) {
return a + b;
};
addition(1, 2);
আমরা যেমন করে আগে ফাঙ্কশন লিখতাম তেমনি থাকবে শুধু ফাঙ্কশন নাম এর পরিবর্তে ভেরিয়েবল বসবে ।এই যে আমরা ভ্যারিয়েবল এ স্টোর করে ফাঙ্কশন রাখলাম এটাকেই মূলত expression বলে । আর আমরা ফাঙ্কশন কল করব ভ্যারিয়েবল এর নাম ধরে ।যেহেতু আমরা ফাঙ্কশন এর কোন নাম দেয়নি তাই আমরা এটাকে anoynimus function ও বলতে পারি ।
এই anoynimus ফাঙ্কশন বেশি ব্যবহার হয় setTimeout ফাঙ্কশন এর মধ্যে ।যা একটা টাইম এর উপর ভিত্তি করে ফাঙ্কশন কে কল করবে ।
setTimeout(function () {
console.log("it will exicute after 5 second");
}, 5000);
এই যে টাইম এর উপর ভিত্তি করে exicute হল এটাকে বলাহয় asynchronous । আমরা এ সম্পর্কে ডিটেলস পরে জানব ।
এবারে আবার আসি expression আমরা কিভাবে স্টোর করতে পারি ।
var addition = function (a, b) {
return a + b;
};
addition(1, 2);
setTimeout(function () {
console.log("it will execute after 5 second");
}, 5000);
var another = addition;
console.log(another(3, 5));
দেখো এখানে আমরা addition ফাঙ্কশন কে একটা another ভ্যারিয়েবল এ স্টোর করেছি কিন্তু invoke করিনি ।invoke করেছি another কে ।এক্সপ্রেশন হিসেবে ব্যবহার করার জন্য আমরা এই প্রসেস করতে পেরেছি ।
066. Inner Function in JavaScript :
আমরা inner ফাঙ্কশন কে নেস্টেড ফাঙ্কশন ও বলতে পারি ।মানে এর আগে যেমন একটা forloop এর মধ্যে আরো forloop ব্যবহার করেছি ঠিক একটা ফাঙ্কশন এর মধ্যে আরো ফাঙ্কশন ব্যবহার করতে পারি ।আরো ভেঙে বলতে গেলে হয় paretnt function তার মধ্যে চাইল্ড ফাঙ্কশন তার মধ্যে আরো চাইল্ড ফাঙ্কশন এমন ।
function প্যারেন্ট () {
function চাইল্ড () {}
চাইল্ড();
}
প্যারেন্ট();
আমরা জানি ফাঙ্কশন ব্যবহার করি ছোট ছোট প্রব্লেম কে সল্ভ করার জন্য ।এই inner ফাঙ্কশন এর consept আসছে সেখান থেকেই ।একটা বড় ফাঙ্কশন এর মধ্যে ছোট ছোট আরো চাইল্ড ফাঙ্কশন রেখে তাকে আমরা ব্যবহার করতে পারি ।আর যেহেতু আমরা বলছি প্যারেন্ট এবং চাইল্ড তাই চাইল্ড ফাঙ্কশন সবসময় প্যারেন্ট এর পেরামিটার ব্যবহার করতে পারবে তবে প্যারেন্ট, চাইল্ড এর কিছু পাবে না। তার দায়িত্ব পেটের মধ্যে রেখে চাইল্ড কে কল করা ।
আমরা একটা নেস্টেড ফাঙ্কশন লিখব যা আমাদের নাম এবং সময়ের উপর ইনপুট নিয়ে গ্রিটিং করবে ।
function greeting(name, time) {
function sayHi() {
if (time === "Morning") {
return " Morning";
} else if (time === "Afternoon") {
return " Afternoon";
} else {
return "Evening";
}
}
var whichTime = sayHi();
return "Hello, " + name + " Good " + whichTime;
}
console.log(greeting("Tanvir", "Afternoon"));
greeting নামে প্যারেন্ট ফাঙ্কশন নিয়েছি যেটা আমাদের দুইটা পেরামিটার provide করে name আর time এবারে একটা চাইল্ড ফাঙ্কশন নিচ্ছি sayHi নামে যার কাজ হচ্ছে time এর উপর ভিত্তি করে আমাদের কন্ডিশন চেক করা সময়টা কি ।এই time এসেছে প্যারেন্ট ফাঙ্কশন থেকে ।এর মানে চাইল্ড চাইলেই প্যারেন্ট এর পেরামিটার নিতে পারে এবং মর্নিং হলে মর্নিং রিটার্ন করে ,afternoon হলে afternoon যাই রিটার্ন করুক সেটাকে আমরা var whichTime ভ্যারিয়েবল এ স্টোর করে sayHi() কল করে দিয়েছি প্যারেন্ট এ । এবার প্যারেন্ট রিটার্ন করতেছে return "Hello, " + name + " Good " + whichTime; আর আমরা বাইরে থেকে greeting কল করে আর্গুমেন্ট দিয়ে দিচ্ছি ।
আউটপুট আসবে :

067. What is Function Scoping in JavaScript:
সহজ ভাষায় যদি scope বুঝার চেষ্টাকরি তাহলে বলাযায় ,একটা ভেরিএবল ডিক্লের করার পরে কোথায় কোথায় সেই ভ্যারিয়েবল এ acess করা যাবে সেটাকেই স্কোপ বলে ।
তুমি যেকোন javascript ফাইল এ ভেরিয়েবল ডিক্লের করো এবং সেটা ব্রাউসার দিয়ে access করো তাহলে window অবজেক্ট এর সাথে atach হয়ে যাবে ।এটাকে আমরা বলব গ্লোবাল ভ্যারিয়েবল ।আমরা যে কোন জায়গা থেকে এই গ্লোবাল ভ্যারিয়েবল acess করতে পারব ।
আমরা স্কোপিং নিয়ে আলাদা একটা চ্যাপ্টার রাখব যেখানে ডিটেলস আলোচনা হবে ।এখানে শুধু দেখা রাখতেছি যে স্কোপ বলে কিছু একটা হয় ।
এর পরের চ্যাপ্টার এ আমরা আলোচনা করব ফাঙ্কশনাল প্রোগ্রামিং নিয়ে ।





