Learn
← Previous Next →

Hari 6: Fungsi — Declaration, Expression & Arrow

65 min Last updated 09 Apr 2026

Tiga Cara Menulis Fungsi

// 1. Function Declaration (hoisted)
function tambah(a, b) {
    return a + b;
}

// 2. Function Expression
const kurang = function(a, b) {
    return a - b;
};

// 3. Arrow Function (ringkas, modern)
const kali = (a, b) => a * b;
const kuadrat = x => x * x;  // satu param: tanpa kurung
const salam = () => "Halo!"; // tanpa param

Parameter Default & Rest

// Default parameter
function sapa(nama = "Tamu", sapaan = "Halo") {
    return `${sapaan}, ${nama}!`;
}
sapa();           // "Halo, Tamu!"
sapa("Budi");     // "Halo, Budi!"
sapa("Sari", "Selamat pagi"); // "Selamat pagi, Sari!"

// Rest parameter (...args)
function jumlahkan(nama, ...angka) {
    const total = angka.reduce((a, b) => a + b, 0);
    return `${nama}: ${total}`;
}
jumlahkan("Total", 1, 2, 3, 4, 5); // "Total: 15"

Higher-Order Functions

// Fungsi yang menerima fungsi lain sebagai argument
function terapkan(arr, fn) {
    return arr.map(fn);
}

const hasil = terapkan([1,2,3,4,5], x => x * 10);
// [10, 20, 30, 40, 50]

// Fungsi yang return fungsi (closure)
function pembuat_pengali(faktor) {
    return x => x * faktor;
}

const kali3 = pembuat_pengali(3);
const kali10 = pembuat_pengali(10);
console.log(kali3(7));  // 21
console.log(kali10(5)); // 50

💡 Notice: Pipeline pattern: output satu fungsi menjadi input fungsi berikutnya. reduce menerapkan setiap fungsi ke accumulator.

Assignment

Buat fungsi pipeline(value, ...fns) yang menerapkan setiap fungsi secara berurutan ke value. Coba: pipeline(5, x => x*2, x => x+3, x => x**2). Tampilkan hasilnya.

Expected output:

169
JS script.js
Solution
Output