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

JavaScript Function ต้องมี Return Value ไหม?

ไม่จำเป็น 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)