ফাংশনের লেক্সিকাল এনভায়রনমেন্টের প্রয়োগ JavaScript-এ
ধরুন আমাদের একটি ফাংশন আছে, যার ফলাফল হিসেবে অন্য একটি ফাংশন ফেরত আসে:
javascriptfunction test() {
return function() {
}
}
যদি প্যারেন্ট ফাংশনের কোনো ভেরিয়েবল থাকে, তাহলে সেই ভেরিয়েবলগুলো রিটার্ন করা ফাংশনের লেক্সিকাল এনভায়রনমেন্টে থাকবে:
javascriptfunction test() {
let num = 1; // প্যারেন্ট ফাংশনের ভেরিয়েবল
return function() {
// লেক্সিকাল এনভায়রনমেন্ট = {num: 1}
}
}
আমাদের রিটার্ন করা ফাংশনের কোডে
console.log লিখি,
যা num ভেরিয়েবলের মান প্রিন্ট করে:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
এখন প্যারেন্ট ফাংশন
test কে কল করি
এবং এর কাজের ফলাফল
func ভেরিয়েবলে রাখি:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func ভেরিয়েবলে রিটার্ন করা
ফাংশন লিখা হবে। আমাদের ফাংশনটি কল করি - এর
ফলাফল হিসেবে num ভেরিয়েবলের কন্টেন্ট
প্রিন্ট হবে:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // 1 প্রিন্ট করবে
আর যদি ফাংশনের বাইরে
num ভেরিয়েবল প্রিন্ট করার চেষ্টা করা হয়
- এটি অ্যাক্সেস করা যাবে না:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
console.log(num); // num ভেরিয়েবল এখানে অ্যাক্সেস করা যায় না
আপনি দেখতে পাচ্ছেন, লোকাল ভেরিয়েবল num
আমাদের ফাংশনের লেক্সিকাল এনভায়রনমেন্টের সাথে বাঁধা পড়েছে
এবং এখন, কোডের যেকোনো জায়গায়
এই ফাংশনটি কল করে, আমরা num
ভেরিয়েবলের মান পেতে পারি,
এমনকি যদি কল করার জায়গায়
এই ভেরিয়েবলটি একা অ্যাক্সেস করা না যায়।
আসলে একই ফলাফল পাওয়া যেতে পারে
num ভেরিয়েবলকে গ্লোবাল করে:
javascriptfunction test() {
return function() {
console.log(num);
}
}
let num = 1; // গ্লোবাল ভেরিয়েবল
let func = test();
func(); // 1 প্রিন্ট করবে
যাইহোক, এখানে একটি গুরুত্বপূর্ণ পার্থক্য থাকবে:
নতুন ভার্সনে num ভেরিয়েবল
ফাংশনের বাইরে পরিবর্তন করা যেতে পারে (যেহেতু এটি গ্লোবাল),
আর পুরানো ভার্সনে - যাবে না।
কোড রান না করেই নির্ধারণ করুন, কনসোলে কী প্রিন্ট হবে:
javascriptfunction test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
let func = test();
console.log(func());
কোড রান না করেই নির্ধারণ করুন, কনসোলে কী প্রিন্ট হবে:
javascriptfunction test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
কোড রান না করেই নির্ধারণ করুন, কনসোলে কী প্রিন্ট হবে:
javascriptfunction test() {
let num1 = 1;
return function() {
return num1 + num2;
}
}
let num2 = 2;
let func = test();
console.log(func());
কোড রান না করেই নির্ধারণ করুন, কনসোলে কী প্রিন্ট হবে:
javascriptfunction test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());