Function sapa yang memanggil dengan sapa("Budi") dan sapa("Siti") jauh lebih berguna daripada dua function terpisah yang masing-masing hanya bisa menyapa satu nama. Jalur masuk data itu disediakan oleh parameter: daftar nama di dalam tanda kurung definisi function yang berperan sebagai wadah sementara. Nilai yang benar-benar dikirim saat pemanggilan disebut argument, dan hubungan keduanya punya aturan main yang perlu dipahami dengan tepat — terutama saat jumlahnya tidak cocok.

Chapter ini menjalankan satu berkas contoh yang menguji tiga kondisi: argument kurang, argument pas, dan argument lebih. Setelah itu kita mengenal arguments object, wadah otomatis berisi semua argument yang dikirim — sebuah mekanisme lama yang masih banyak dijumpai di kode nyata.

Parameter, Argument, dan Jumlah yang Tidak Cocok #

Parameter adalah nama yang kita tulis di definisi; argument adalah nilai yang masuk saat pemanggilan. Pencocokannya dilakukan berdasarkan posisi: argument pertama mengisi parameter pertama, argument kedua mengisi parameter kedua, dan seterusnya. Karena JavaScript tidak memeriksa jumlah argument terhadap jumlah parameter, tiga kemungkinan bisa terjadi — kurang, pas, atau lebih — dan ketiganya kita uji sekaligus:

// parameter-argument.js
// Perilaku parameter saat argument kurang, pas, atau lebih.

function sapa(nama, sapaan) {
  console.log(sapaan + ", " + nama + "!");
}

// --- 1. argument kurang: parameter yang kosong bernilai undefined ---
sapa("Budi");

// --- 2. argument pas: urutannya mengikuti posisi parameter ---
sapa("Siti", "Selamat pagi");

// --- 3. argument lebih: kelebihan diabaikan tanpa pesan error ---
sapa("Budi", "Hai", "salam hangat dari kami");

// --- 4. jumlah parameter resmi yang dideklarasikan ---
console.log("Parameter dideklarasikan:", sapa.length);

// --- 5. arguments object: wadah semua argument (pola lama) ---
function hitungTotal() {
  console.log("Jumlah argument:", arguments.length);
  console.log("Argument pertama:", arguments[0]);
  console.log("Tipe arguments:", typeof arguments);
  let total = 0;
  for (let i = 0; i < arguments.length; i++) {
    total = total + arguments[i];
  }
  return total;
}

console.log("Total:", hitungTotal(2000, 3500, 1500));

Output yang Dihasilkan:

text
undefined, Budi!
Selamat pagi, Siti!
Hai, Budi!
Parameter dideklarasikan: 2
Jumlah argument: 3
Argument pertama: 2000
Tipe arguments: object
Total: 7000

Mari kita telaah apa yang terjadi pada baris-baris kode di atas:

  1. Baris 9 (sapa("Budi");): hanya satu argument dikirim, sedangkan sapa menerima dua parameter. Parameter sapaan tetap diciptakan, tetapi kosong — nilainya undefined. Hasil cetakannya, undefined, Budi!, adalah bukti nyata bahwa argument yang hilang tidak memicu error, melainkan menyusup diam-diam sebagai undefined.
  2. Baris 12 (sapa("Siti", "Selamat pagi");): jumlah argument sama dengan jumlah parameter. Pencocokan posisi menempatkan "Siti" ke nama dan "Selamat pagi" ke sapaan — urutan argument harus diingat, bukan urutan menulisnya.
  3. Baris 15 (sapa("Budi", "Hai", "salam hangat dari kami");): argument ketiga tidak punya parameter untuk menampungnya. JavaScript mengabaikannya tanpa peringatan, dan function hanya memakai dua argument pertama.
  4. Baris 18 (console.log("Parameter dideklarasikan:", sapa.length);): setiap function memiliki properti length yang berisi jumlah parameter sebelum ada parameter ber-default atau rest (keduanya dibahas dua chapter ke depan). Untuk sapa, angkanya 2.
  5. Baris 21–30 (function hitungTotal() { ... }): meski tanpa parameter sama sekali, function ini tetap menerima tiga argument. Wadah arguments otomatis berisi semuanya: arguments.length melaporkan 3, arguments[0] membaca argument pertama, dan typeof melaporkan object.
  6. Baris 26–29 (loop for dan return total;): arguments terbaca layaknya array — bisa dihitung length-nya dan diakses lewat indeks — sehingga loop klasik dapat menjumlahkan seluruhnya. Hasilnya 2000 + 3500 + 1500 = 7000. Statement return sendiri dibedah penuh di chapter Return Values.

Dari keenam poin itu, satu pola patut digarisbawahi: kelebihan maupun kekurangan argument tidak pernah ditolak keras oleh JavaScript. Semuanya ditangani diam-diam, dan justru sifat diam itulah yang paling sering menjadi sumber bug.

Satu detail mekanisme yang melengkapi gambaran: parameter diinisiasi ulang pada setiap pemanggilan. Function yang sama yang dipanggil tiga kali membentuk tiga set parameter yang saling tidak berhubungan — nilai dari pemanggilan sebelumnya tidak pernah tersisa. Karena itulah function yang dipakai berulang tidak meninggalkan bekas di memori pemanggilan berikutnya.

Ketergantungan pada posisi juga patut diwaspadai saat jumlah argumentnya banyak. Pemanggilan sapa("Selamat pagi", "Budi") sah secara sintaks, tetapi kedua teksnya tertukar: sapaan menerima "Budi" dan nama menerima "Selamat pagi". JavaScript tidak mengenali makna teks — pencocokan murni mengikuti urutan. Pada function dengan tiga parameter atau lebih, telusuri ulang urutan argument setiap kali menulis pemanggilannya.

Menjaga Parameter yang Wajib Ada #

Karena argument yang hilang tidak ditolak, function yang betul-betul membutuhkan data tertentu sebaiknya memeriksanya sendiri di awal badan. Cara paling lugas: bandingkan parameter dengan undefined, lalu alirkan ke cabang penanganannya:

js
function buatSalam(nama) {
  if (nama === undefined) {
    console.log("Parameter nama wajib diisi");
  } else {
    console.log("Halo, " + nama + "!");
  }
}

buatSalam("Budi");
buatSalam();

Output yang Dihasilkan:

text
Halo, Budi!
Parameter nama wajib diisi

Pemanggilan kedua tidak lagi menghasilkan undefined, undefined! — kekurangan argument terdeteksi dan dilaporkan dengan pesan yang jelas. Pola pemeriksaan ini adalah versi manual dari default parameters (chapter kelima) dan guard clause dengan return (chapter keempat): keduanya akan menyingkat pola di atas menjadi lebih pendek setelah alatnya kita kenal.

Dampak undefined yang lolos juga perlu diingat dari section Values and Types: nilai undefined yang ikut dihitung mengubah hasil menjadi NaN. Function perkalian sederhana yang dipanggil dengan satu argument — kali(5) — menghasilkan NaN, bukan error. Kegagalan semacam ini menyusup jauh sebelum terlihat di layar.

arguments Object: Wadah Otomatis yang Berusia #

arguments adalah object yang otomatis tersedia di dalam setiap function biasa (non-arrow). Ia menampung seluruh argument yang dikirim, terlepas dari daftar parameter resmi. Cara membacanya mirip array: arguments.length, arguments[0], arguments[1], dan seterusnya. Karena itu, pola seperti hitungTotal di atas menjadi cara standar menulis function yang menerima jumlah nilai bebas.

Meski demikian, arguments bukan array sungguhan. Ia tidak punya method array seperti yang dipakai untuk menyaring atau mengubah isi; yang dimilikinya hanya akses indeks dan length. Kita akan membuktikan perbedaan ini dengan pengukuran yang lebih teliti di chapter Rest Parameters.

Ada pula dua alasan modern untuk tidak memulai kode baru dengan arguments. Pertama, function arrow — topik chapter ketujuh — sama sekali tidak memiliki arguments, sehingga pola ini tidak bisa dibawa ke gaya penulisan yang paling lazim saat ini. Kedua, rest parameter menyediakan pengganti yang lebih baik: sisa argument dikumpulkan menjadi array sungguhan dengan nama yang jelas. Dua alasan itu menjadikan arguments pengetahuan “untuk membaca kode lama” (legacy), bukan untuk menulis kode baru.

Sekarang data sudah bisa masuk ke function. Bagian yang belum kita bahas dengan tertib adalah jalur keluarnya: bagaimana function mengirim hasil perhitungannya kembali ke pemanggil — itulah urusan statement return di chapter berikutnya.

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

parameter-argument.js

Unduh berkas
javascript
// parameter-argument.js
// Perilaku parameter saat argument kurang, pas, atau lebih.

function sapa(nama, sapaan) {
  console.log(sapaan + ", " + nama + "!");
}

// --- 1. argument kurang: parameter yang kosong bernilai undefined ---
sapa("Budi");

// --- 2. argument pas: urutannya mengikuti posisi parameter ---
sapa("Siti", "Selamat pagi");

// --- 3. argument lebih: kelebihan diabaikan tanpa pesan error ---
sapa("Budi", "Hai", "salam hangat dari kami");

// --- 4. jumlah parameter resmi yang dideklarasikan ---
console.log("Parameter dideklarasikan:", sapa.length);

// --- 5. arguments object: wadah semua argument (pola lama) ---
function hitungTotal() {
  console.log("Jumlah argument:", arguments.length);
  console.log("Argument pertama:", arguments[0]);
  console.log("Tipe arguments:", typeof arguments);
  let total = 0;
  for (let i = 0; i < arguments.length; i++) {
    total = total + arguments[i];
  }
  return total;
}

console.log("Total:", hitungTotal(2000, 3500, 1500));