tutorial, javascript,

JavaScript: Fungsi, Arrow Function, dan Scope

Kiki/🎮🍉⌨️🍩💻 Kiki/🎮🍉⌨️🍩💻 Oct 05, 2026 · 8 mins read
JavaScript: Fungsi, Arrow Function, dan Scope
Share this

Fungsi adalah blok kode yang diberi nama dan bisa dipanggil berulang kali. Fungsi adalah unit terkecil dari abstraksi dalam pemrograman — cara mengelompokkan logika agar tidak perlu ditulis ulang. Di JavaScript, fungsi adalah first-class citizen — bisa disimpan di variabel, dikirim sebagai argumen, dan dikembalikan sebagai nilai.


Cara Mendefinisikan Fungsi

Function Declaration

function sapa(nama) {
  return `Halo, ${nama}!`;
}

console.log(sapa("Budi"));   // "Halo, Budi!"
console.log(sapa("Sari"));   // "Halo, Sari!"

Function declaration bisa dipanggil sebelum didefinisikan (hoisting):

console.log(tambah(3, 4));  // 7 — bekerja meskipun fungsi di bawah

function tambah(a, b) {
  return a + b;
}

Function Expression

// Fungsi disimpan di variabel
const kali = function(a, b) {
  return a * b;
};

console.log(kali(4, 5));  // 20

Function expression tidak di-hoist — harus didefinisikan sebelum dipanggil.

Arrow Function (ES6) — Cara Modern

// Format: (parameter) => ekspresi atau { blok kode }

// Satu baris — return implicit
const kuadrat = (n) => n * n;
const salam = nama => `Halo, ${nama}!`;  // satu parameter, () opsional

// Multi baris — perlu return eksplisit
const hitungLuas = (panjang, lebar) => {
  const luas = panjang * lebar;
  return luas;
};

console.log(kuadrat(5));       // 25
console.log(salam("Budi"));    // "Halo, Budi!"
console.log(hitungLuas(4, 6)); // 24

Parameter dan Argumen

// Default parameter — nilai jika tidak dikirim
function buat(nama, role = "member", aktif = true) {
  return { nama, role, aktif };
}

console.log(buat("Budi"));               // { nama: "Budi", role: "member", aktif: true }
console.log(buat("Sari", "admin"));      // { nama: "Sari", role: "admin", aktif: true }
console.log(buat("Tono", "guest", false));

// Rest parameter — kumpulkan argumen sisa ke array
function jumlahSemua(...angka) {
  return angka.reduce((total, n) => total + n, 0);
}

console.log(jumlahSemua(1, 2, 3));         // 6
console.log(jumlahSemua(10, 20, 30, 40));  // 100

Return Value

// Fungsi bisa return nilai apapun
function cekGenap(n) {
  return n % 2 === 0;  // return boolean
}

function getUser(id) {
  return { id, nama: "Budi" };  // return object
}

// Tanpa return → function mengembalikan undefined
function cetakHalo() {
  console.log("Halo!");
  // tidak ada return
}

const hasil = cetakHalo();
console.log(hasil);  // undefined

Scope

Scope menentukan di mana variabel bisa diakses. JavaScript punya beberapa level scope:

Global Scope

const appNama = "Blog Kiki";  // variabel global

function tampilkanNama() {
  console.log(appNama);  // bisa akses variabel global
}

tampilkanNama();  // "Blog Kiki"

Function Scope

function hitungDiskon(harga) {
  const diskon = 0.1;        // hanya ada di dalam fungsi ini
  const hasil = harga * diskon;
  return hasil;
}

// console.log(diskon);  // ReferenceError: diskon tidak terdefinisi

Block Scope (let dan const)

{
  let temp = 100;
  const MAX = 200;
  console.log(temp);  // 100
}

// console.log(temp);  // ReferenceError
// console.log(MAX);   // ReferenceError

Closure — Fungsi yang “Mengingat” Scope-nya

Closure adalah fungsi yang tetap bisa mengakses variabel dari scope tempat ia dibuat, meski scope tersebut sudah selesai:

function buatCounter() {
  let count = 0;  // variabel di outer function

  return function() {
    count++;           // akses variabel dari outer function
    return count;
  };
}

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

const counter2 = buatCounter();
console.log(counter2()); // 1 ← counter baru, independen

Closure sangat berguna untuk enkapsulasi data dan membuat module pattern.


Higher-Order Function

JavaScript mendukung fungsi sebagai nilai — bisa dikirim sebagai argumen atau dikembalikan sebagai hasil:

// Fungsi sebagai argumen (callback)
function prosesData(angka, transform) {
  return transform(angka);
}

const duaKali = n => n * 2;
const kuadrat = n => n ** 2;

console.log(prosesData(5, duaKali));  // 10
console.log(prosesData(5, kuadrat));  // 25

// Ini adalah dasar dari map, filter, reduce!
const angka = [1, 2, 3, 4, 5];

const digandakan = angka.map(n => n * 2);
console.log(digandakan);  // [2, 4, 6, 8, 10]

const genap = angka.filter(n => n % 2 === 0);
console.log(genap);       // [2, 4]

const total = angka.reduce((acc, n) => acc + n, 0);
console.log(total);       // 15

IIFE — Immediately Invoked Function Expression

Fungsi yang langsung dipanggil saat didefinisikan:

(function() {
  const rahasia = "tidak bisa diakses dari luar";
  console.log("IIFE berjalan!");
})();

// Versi arrow function
(() => {
  console.log("Arrow IIFE");
})();

Kesimpulan

Fungsi adalah alat terpenting dalam JavaScript. Dengan memahami function declaration, arrow function, scope, closure, dan higher-order function, kamu sudah siap menulis kode JavaScript yang terstruktur dan maintainable.

Di artikel berikutnya, kita bahas Array dan Object — struktur data utama di JavaScript untuk mengelola kumpulan informasi.

Kiki/🎮🍉⌨️🍩💻
Written by Kiki/🎮🍉⌨️🍩💻
hello I'm friend K.