Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

Callback Functions ใน JavaScript คืออะไร

Callback Function คือ ฟังก์ชันที่ถูกส่งเป็น อาร์กิวเมนต์ ให้ฟังก์ชันอื่น และถูก เรียกใช้ภายใน ฟังก์ชันนั้น (มักจะเป็น Asynchronous)

ตัวอย่างพื้นฐาน

<html>
  <head>
    <script>
      var callback = function(myCallback) {
        setTimeout(function() {
          myCallback(); // เรียก callback หลัง 5 วินาที
        }, 5000);
      };

      document.write("First is displayed");
      document.write("<br>Second is displayed");

      callback(function() {
        document.write("This is Callback function");
      });

      document.write("<br>Last is displayed");
    </script>
  </head>
  </html>

ลำดับการทำงาน

First is displayed
Second is displayed
Last is displayed
(รอ 5 วินาที)
This is Callback function

รูปแบบ Callback Patterns

1. Synchronous Callback

[1, 2, 3].forEach(function(item) {
  console.log(item); // เรียกทันทีแบบ synchronous
});

2. Asynchronous Callback (Node.js Style - Error-first)

fs.readFile('file.txt', 'utf8', function(err, data) {
  if (err) return console.error(err);
  console.log(data);
});

3. Promise-based (Modern)

fetchData()
  .then(data => console.log(data))
  .catch(err => console.error(err));

4. Async/Await (ES2017)

async function handleData() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

ปัญหา Callback Hell

doStep1(function() {
  doStep2(function() {
    doStep3(function() {
      // น่ากลัว...
    });
  });
});

แก้ด้วย: Promises, Async/Await, หรือ Modularize โค้ด

Callback ใน Built-in Methods

  • Array: forEach, map, filter, reduce, find, sort
  • String: replace (with function)
  • Timer: setTimeout, setInterval
  • Event: addEventListener