পাস বাই ভ্যালু (Pass by Value)
পাস বাই ভ্যালু-তে, একটি ফাংশনকে কল করার সময় ভ্যারিয়েবলের মান সরাসরি আর্গুমেন্ট হিসেবে পাস করা হয়। ফাংশনের ভিতরে আর্গুমেন্টের মান পরিবর্তন করলে বাইরের ভ্যারিয়েবলটি প্রভাবিত হয় না। জাভাস্ক্রিপ্ট সবসময় পাস বাই ভ্যালু অনুসরণ করে, তাই প্রিমিটিভ ভ্যালু (String বা Number) পরিবর্তন করলে আসল মান পরিবর্তন হয় না।
নিচের উদাহরণে, ভ্যারিয়েবল 'a'-র মান ১। কিন্তু 'change' ফাংশনের ভিতরে সেটি ২ করা হয়েছে। যেহেতু জাভাস্ক্রিপ্ট পাস বাই ভ্যালু, তাই আউটপুট হবে '১', '২' নয়।
উদাহরণ
<html> <body> <script> let a = 1; let change = (val) => { val = 2 } change(a); document.write(a); </script> </body> </html>আউটপুট
1
পাস বাই রেফারেন্স (Pass by Reference)
কখনো কখনো আর্গুমেন্টের পরিবর্তে অ্যাড্রেস পাস করে ফাংশন কল করা হয়। সেক্ষেত্রে ফাংশনের ভিতরে মান পরিবর্তন করলে বাইরের ভ্যারিয়েবলও পরিবর্তিত হয়। এটাকে পাস বাই রেফারেন্স বলে। জাভাস্ক্রিপ্টে অধিকাংশ অ্যারে এবং অবজেক্ট পাস বাই রেফারেন্স আচরণ করে।
নিচের উদাহরণে 'a' নামক একটি অবজেক্ট 'change' ফাংশনের বাইরে ডিক্লেয়ার করা হয়েছে। এখানে লক্ষ্য করুন, ভ্যারিয়েবল 'a'-কে মিউটেট (mutate) করা হয়েছে, অ্যাসাইন (assign) করা হয়নি। পাস বাই রেফারেন্স তখন ঘটে যখন মিউটেশন হয়।
উদাহরণ-১
<html> <body> <script> let a = {num:1}; let change = (val) => { val.num = 2 } change(a); document.write(JSON.stringify(a)); </script> </body> </html>আউটপুট
{"num":2}নিচের উদাহরণে মিউটেশনের বদলে ভ্যারিয়েবল 'a'-কে অ্যাসাইন করা হয়েছে মান ২ দিয়ে। তাই পাস বাই ভ্যালু ঘটে এবং বাইরের ভ্যারিয়েবলে কোনো প্রভাব পড়ে না।
উদাহরণ-২
<html> <body> <script> let a = {num : 1}; let change = (val) => { val = {num :2}; } change(a); document.write(JSON.stringify(a)); </script> </body> </html>আউটপুট
{"num":1}