คอนเท็กซ์ของฟังก์ชันที่ไม่ได้ผูกไว้ใน JavaScript
มาดูกันว่า จะเกิดอะไรขึ้นถ้าในฟังก์ชัน
ระบุ this แต่ไม่ได้ผูกมันไว้
กับองค์ประกอบใด ๆ ดังนี้:
function func() {
console.log(this);
}
func();
ในกรณีนี้ ผลลัพธ์ขึ้นอยู่กับว่า
เราอยู่ในโหมด strict
หรือไม่ หากไม่ได้เปิดโหมด strict
ใน this จะเก็บ reference ไปยัง
window:
function func() {
console.log(this); // อ้างอิงไปยัง window
}
func();
แต่ถ้าเปิดโหมด strict แล้ว ใน this จะ
เก็บค่าเป็น undefined:
"use strict";
function func() {
console.log(this); // undefined
}
func();
จากที่กล่าวมาข้างต้น อาจดูเหมือนว่า
ในโหมด strict this จะเป็น
undefined เสมอ ไม่ใช่เลย! หากเพียงแค่
แสดงค่า this นอกฟังก์ชัน ค่านั้น
จะยังคงเป็น reference ไปยัง window โดยไม่ขึ้นกับ
โหมด:
"use strict";
console.log(this); // ใน this เป็น reference ไปยัง window
สรุป
ในฟังก์ชันใดก็ตามสามารถเขียน this ได้
สิ่งนี้จะไม่ทำให้เกิดข้อผิดพลาดใด ๆ ใน JavaScript
แต่สิ่งที่อยู่ใน this นี้
จะยังไม่ถูกกำหนดจนกว่าฟังก์ชันจะถูกเรียกใช้
และในการเรียกใช้ฟังก์ชันแต่ละครั้ง this
อาจรับค่าได้ต่างกัน ทั้งหมดขึ้นอยู่
กับคอนเท็กซ์ที่ฟังก์ชันถูกเรียกใช้