ไม่จำเป็น JavaScript function สามารถไม่มี return statement ได้ (implicit return undefined) หรือมี return โดยไม่มีค่า ก็ได้
ตัวอย่างจากบทความ
<html>
<head>
<script type="text/javascript">
function concatenate(first, last) {
var full;
full = first + last;
return full;
}
function secondFunction() {
var result;
result = concatenate('John', 'Doe');
document.write(result);
}
</script>
</head>
<body>
<p>คลิกปุ่มเพื่อเรียกฟังก์ชัน</p>
<form>
<input type="button" onclick="secondFunction()" value="Call Function">
</form>
</body>
</html>
รูปแบบ Return ต่างๆ
1. ไม่มี return (Implicit undefined)
function logMessage(msg) {
console.log(msg);
}
const result = logMessage("Hello"); // undefined
2. return โดยไม่มีค่า (Early exit)
function processUser(user) {
if (!user) return; // return undefined ทันที
console.log("Processing:", user.name);
// ... logic
}
3. return ค่า (Expression)
function add(a, b) {
return a + b; // expression
}
function getUser(id) {
return { id, name: "User" + id }; // object literal
}
function getItems() {
return [1, 2, 3]; // array
}
4. return ใน Arrow Function
// Implicit return (ไม่มี braces)
const add = (a, b) => a + b;
const getObj = () => ({ name: "John" }); // object ต้องห่อใน ()
// Explicit return (มี braces)
const addExplicit = (a, b) => {
return a + b;
};
การใช้งาน Return Value
1. Chaining
const result = add(1, 2) * 3; // 9
2. Conditional Return
function divide(a, b) {
if (b === 0) return null; // หรือ throw error
return a / b;
}
3. Multiple Return Points
function getStatus(code) {
if (code >= 200 && code < 300) return 'success';
if (code >= 400 && code < 500) return 'client error';
if (code >= 500) return 'server error';
return 'unknown';
}
Constructor Function และ return
function User(name) {
this.name = name;
// ถ้า return object -> คืน object นั้น (ไม่ใช่ this)
// ถ้า return primitive -> ไม่นับ ใช้ this
// ถ้าไม่มี return -> ใช้ this
return { name: 'Overridden' }; // instance จะเป็น object นี้
}
const u = new User('John');
console.log(u.name); // 'Overridden' (ไม่ใช่ 'John')
Best Practice
- ฟังก์ชันที่คำนวณค่า → ควร return ค่า (pure function)
- ฟังก์ชันที่ทำ Side Effect (log, DOM manipulation, API call) → อาจ ไม่ return หรือ return status
- หลีกเลี่ยง
returnแบบ implicit ใน arrow function ที่ซับซ้อน (อ่านยาก) - Early return เพื่อลด nesting (Guard clause)