คอนเท็กซ์ของฟังก์ชันที่ไม่ได้ผูกไว้ใน JavaScript

มาดูกันว่า จะเกิดอะไรขึ้นถ้าในฟังก์ชัน ระบุ this แต่ไม่ได้ผูกมันไว้ กับองค์ประกอบใด ๆ ดังนี้:

javascriptfunction func() {
  console.log(this);
}

func();

ในกรณีนี้ ผลลัพธ์ขึ้นอยู่กับว่า เราอยู่ในโหมด strict หรือไม่ หากไม่ได้เปิดโหมด strict ใน this จะเก็บ reference ไปยัง window:

javascriptfunction func() {
  console.log(this); // อ้างอิงไปยัง window
}

func();

แต่ถ้าเปิดโหมด strict แล้ว ใน this จะ เก็บค่าเป็น undefined:

javascript"use strict";

function func() {
  console.log(this); // undefined
}

func();

จากที่กล่าวมาข้างต้น อาจดูเหมือนว่า ในโหมด strict this จะเป็น undefined เสมอ ไม่ใช่เลย! หากเพียงแค่ แสดงค่า this นอกฟังก์ชัน ค่านั้น จะยังคงเป็น reference ไปยัง window โดยไม่ขึ้นกับ โหมด:

javascript"use strict";
console.log(this); // ใน this เป็น reference ไปยัง window

สรุป

ในฟังก์ชันใดก็ตามสามารถเขียน this ได้ สิ่งนี้จะไม่ทำให้เกิดข้อผิดพลาดใด ๆ ใน JavaScript แต่สิ่งที่อยู่ใน this นี้ จะยังไม่ถูกกำหนดจนกว่าฟังก์ชันจะถูกเรียกใช้ และในการเรียกใช้ฟังก์ชันแต่ละครั้ง this อาจรับค่าได้ต่างกัน ทั้งหมดขึ้นอยู่ กับคอนเท็กซ์ที่ฟังก์ชันถูกเรียกใช้