Skip to content

Functions คือ ชุดคำสั่งที่เขียนขึ้นมาเพื่อทำงานเฉพาะอย่าง สามารถเรียกใช้ซ้ำได้หลายครั้ง ช่วยให้โค้ดเป็นระเบียบและนำกลับมาใช้ใหม่ได้

Basic function (พื้นฐาน function)

การสร้างฟังก์ชันพื้นฐาน ประกอบด้วย:

  • คีย์เวิร์ด function
  • ชื่อฟังก์ชัน
  • พารามิเตอร์ในวงเล็บ (ถ้ามี)
  • โค้ดที่ต้องการให้ทำงานในวงเล็บปีกกา {}
  • คำสั่ง return เพื่อส่งค่ากลับ (ถ้ามี)
js
// ฟังก์ชันที่รับพารามิเตอร์ชื่อ name และส่งคืนข้อความทักทาย
function sayHello(name) {
  return `Hello, ${name}!`;
}

Function with parameters (พารามิเตอร์)

พารามิเตอร์คือข้อมูลที่ส่งเข้าไปในฟังก์ชัน เพื่อนำไปประมวลผล

js
// ฟังก์ชันบวกเลขที่รับพารามิเตอร์สองตัว
function add(a, b) {
  return a + b;
}

Function Call (เรียกใช้ function)

เมื่อสร้างฟังก์ชันแล้ว ต้องเรียกใช้ โดยระบุชื่อฟังก์ชันตามด้วยวงเล็บ และส่งค่าเข้าไปตามที่ฟังก์ชันต้องการ

js
// เรียกใช้ basic function
console.log(sayHello("John"));  // แสดงผล: Hello, John!

// เรียกใช้ function with parameters
console.log(add(2, 3));  // แสดงผล: 5

Function Expression (function ที่กำหนดให้กับตัวแปร)

คือการเก็บฟังก์ชันไว้ในตัวแปร ทำให้สามารถส่งฟังก์ชันไปเป็นพารามิเตอร์ได้

js
// กำหนดฟังก์ชันให้กับตัวแปร sayHello
const sayHello = function(name) {
  return `Hello, ${name}!`;
};

Arrow function (function ที่ใช้ =>)

รูปแบบฟังก์ชันแบบสั้นกว่า ใช้เครื่องหมาย => แทนคำว่า function ช่วยให้โค้ดกระชับขึ้น

js
// ฟังก์ชันลูกศรที่ทำงานเหมือนกับฟังก์ชันด้านบน
const sayHello = (name) => {
  return `Hello, ${name}!`;
};

IIFE (Immediately Invoked Function Expression) (function ที่เรียกใช้ทันที)

ฟังก์ชันที่ทำงานทันทีที่ถูกสร้าง ใช้เพื่อแยกขอบเขตตัวแปร ไม่ให้ปนกับโค้ดส่วนอื่น

js
// ฟังก์ชันที่ถูกเรียกใช้ทันทีที่ถูกสร้าง
(function sayHello(name) {
  return `Hello, ${name}!`;
})("John");  // ทำงานทันทีโดยส่ง "John" เข้าไป

Anonymous Function (function ที่ไม่กำหนดชื่อ)

ฟังก์ชันที่ไม่มีชื่อ มักใช้เป็นฟังก์ชันที่ส่งเข้าไปในฟังก์ชันอื่น

js
// ฟังก์ชันที่ไม่มีชื่อ
function (name) {
  return `Hello, ${name}!`;
}

Async Function (function ที่ใช้ async)

ฟังก์ชันที่รองรับการทำงานแบบ asynchronous ใช้กับงานที่ต้องรอผลลัพธ์ เช่น ดึงข้อมูลจากเซิร์ฟเวอร์

js
// ฟังก์ชันที่ดึงข้อมูลจาก URL แบบ asynchronous
async function fetchData(url) {
  const response = await fetch(url);
  return response.json();
}

Generator Function (function ที่ใช้ yield)

ฟังก์ชันพิเศษที่สามารถหยุดและกลับมาทำงานต่อได้ ใช้ yield เพื่อส่งค่าแต่ละครั้ง

js
// ฟังก์ชันที่สร้างลำดับตัวเลข 1, 2, 3
function* numberGenerator() {
  yield 1;
  yield 2;
  yield 3;
}

Constructor Function (function สร้าง object)

ฟังก์ชันที่ใช้สร้างออบเจ็กต์ใหม่ โดยใช้คีย์เวิร์ด this เพื่ออ้างถึงออบเจ็กต์ที่กำลังสร้าง

js
// ฟังก์ชันสร้างออบเจ็กต์ Person
function Person(name, age) {
  this.name = name;
  this.age = age;
  this.greet = function() {
    return `สวัสดี ฉันชื่อ ${this.name} อายุ ${this.age} ปี`;
  };
}

const person1 = new Person("สมชาย", 25);
console.log(person1.greet());  // "สวัสดี ฉันชื่อ สมชาย อายุ 25 ปี"

Callback Function (function ที่ใช้ callback)

ฟังก์ชันที่ถูกส่งเข้าไปในฟังก์ชันอื่น เพื่อให้ทำงานในภายหลัง เช่น หลังจากการทำงานอื่นเสร็จสิ้น

js
// ฟังก์ชันที่จะถูกส่งไปเป็น callback
function callbackFunction() {
  console.log("Callback function called");
}

// ฟังก์ชันที่รับ callback เป็นพารามิเตอร์
function higherOrderFunction(callback) {
  console.log("ทำงานบางอย่าง...");
  callback();  // เรียกใช้ฟังก์ชันที่รับเข้ามา
}

higherOrderFunction(callbackFunction);
// แสดงผล: "ทำงานบางอย่าง..." ตามด้วย "Callback function called"

Higher Order Function (function ที่รับ function หรือ callback หรือ return function)

ฟังก์ชันที่รับฟังก์ชันอื่นเป็นพารามิเตอร์ หรือส่งคืนฟังก์ชัน ช่วยให้โค้ดยืดหยุ่นและนำกลับมาใช้ใหม่ได้ง่าย

js
// ฟังก์ชันที่รับฟังก์ชันอื่นเป็นพารามิเตอร์
function higherOrderFunction(callback) {
  callback();
}

// ฟังก์ชันที่ส่งคืนฟังก์ชัน
function createMultiplier(factor) {
  return function(number) {
    return number * factor;
  };
}

const double = createMultiplier(2);
console.log(double(5));  // 10

Closures (function ที่ใช้ closure)

ฟังก์ชันที่สามารถเข้าถึงตัวแปรและฟังก์ชันที่อยู่ภายนอกได้แม้ฟังก์ชันภายนอกจะถูกเรียกใช้แล้ว

js
// ฟังก์ชันที่สร้าง closure
function createCounter() {
  let count = 0;
  return function() {
    count++;
    return count;
  };
}

const counter = createCounter();
console.log(counter());  // 1
console.log(counter());  // 2