JavaScript-এ আনবাউন্ড ফাংশনের কনটেক্সট
আসুন দেখি কি হয় যদি একটি ফাংশনে
this উল্লেখ করা হয় কিন্তু এটি কোনো
এলিমেন্টের সাথে বাঁধা না থাকে, এভাবে:
function func() {
console.log(this);
}
func();
এই ক্ষেত্রে ফলাফল নির্ভর করে আমাদের
স্ট্রিক্ট মোড
চালু আছে কিনা তার উপর। যদি মোড নন-স্ট্রিক্ট হয়,
তবে this-এ window-এর একটি রেফারেন্স
সংরক্ষিত থাকবে:
function func() {
console.log(this); // window-এর রেফারেন্স
}
func();
আর যদি মোড স্ট্রিক্ট হয়, তবে this-এ
undefined সংরক্ষিত থাকবে:
"use strict";
function func() {
console.log(this); // undefined
}
func();
উপরের কথাগুলো থেকে মনে হতে পারে যে
স্ট্রিক্ট মোডে this সর্বদা
undefined হবে। কখনওই না! যদি শুধু
ফাংশনের বাইরে this আউটপুট করা হয়, তবে এতে
window-এর রেফারেন্স থাকবে মোড
নির্বিশেষে:
"use strict";
console.log(this); // this-এ window-এর রেফারেন্স
সিদ্ধান্ত
যেকোনো ফাংশনে this লেখা যেতে পারে,
এটি JavaScript-এর কোনো ত্রুটির কারণ হবে না।
কিন্তু এই this-এ ঠিক কী থাকবে তা
ফাংশনটি কল হওয়ার মুহূর্ত পর্যন্ত সংজ্ঞায়িত নয়।
তদুপরি, ফাংশনের বিভিন্ন কলের সময় this
ভিন্ন ভিন্ন মান নিতে পারে। এটি সম্পূর্ণরূপে নির্ভর করে
কোন কনটেক্সটে ফাংশনটি কল করা হয়েছিল তার উপর।