Dark mode
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 processData(data, callback) {
// ประมวลผลข้อมูล
const result = `Processed: ${data}`;
// เรียกใช้ callback เมื่อเสร็จสิ้น
callback(result);
}
// เรียกใช้ฟังก์ชันพร้อมส่ง callback
processData("sample data", function(result) {
console.log(result); // แสดงผล: "Processed: sample data"
});
Higher Order Function (function ชั้นสูง)
ฟังก์ชันที่รับฟังก์ชันอื่นเป็นพารามิเตอร์ หรือส่งคืนฟังก์ชัน ทำให้สามารถสร้างโค้ดที่ยืดหยุ่นและนำกลับมาใช้ใหม่ได้ง่าย
js
// ฟังก์ชันที่ส่งคืนฟังก์ชันใหม่
function createMultiplier(factor) {
// ส่งคืนฟังก์ชันที่คูณด้วย factor
return function(number) {
return number * factor;
};
}
// สร้างฟังก์ชันสำหรับคูณด้วย 2
const double = createMultiplier(2);
console.log(double(5)); // 10
// สร้างฟังก์ชันสำหรับคูณด้วย 3
const triple = createMultiplier(3);
console.log(triple(5)); // 15
Closures (การเข้าถึงตัวแปรภายนอก)
ความสามารถของฟังก์ชันในการเข้าถึงตัวแปรที่ประกาศในขอบเขตภายนอก แม้ว่าฟังก์ชันภายนอกจะทำงานเสร็จแล้ว
js
// ฟังก์ชันที่สร้าง counter
function createCounter() {
let count = 0; // ตัวแปรภายใน createCounter
// ส่งคืนฟังก์ชันที่สามารถเข้าถึง count
return function() {
count++; // เข้าถึงตัวแปร count จากฟังก์ชันภายนอก
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3