- Bab 8 dari 12
- 30 menit
- 1 latihan kode
- 4 soal kuis
ES6: let, const, Arrow Function, dan Template Literals
Di bab ini (9 bagian)
Tujuan bab ini
- Memahami apa itu ES6 (ES2015) dan kenapa hampir semua kode JavaScript modern memakainya.
- Membedakan
var,let, danconstdari sisi scope, redeclare, reassign, dan hoisting. - Menulis arrow function dan memahami implicit return serta
thisleksikal. - Membuat string dengan template literals dan mengenal tagged template.
Apa itu ES6?
JavaScript punya "buku aturan" resmi bernama ECMAScript, dikelola komite TC39 di bawah Ecma International. Browser dan Node.js membaca buku aturan ini untuk tahu sintaks apa saja yang harus didukung.
Versi ke-6 dirilis Juni 2015, sehingga punya dua nama: ES6 dan ES2015. Ini pembaruan terbesar sepanjang sejarah JavaScript. Sebelumnya, versi besar terakhir adalah ES5 (2009). Sesudah 2015, TC39 merilis versi baru setiap tahun (ES2016, ES2017, dan seterusnya) dengan fitur yang lebih kecil-kecil.
| Tahun | Versi | Yang penting |
|---|---|---|
| 2009 | ES5 | strict mode, JSON, method array seperti forEach dan map |
| 2015 | ES6 / ES2015 | let/const, arrow function, class, module, Promise, destructuring |
| 2016+ | ES2016 dan seterusnya | Rilis tahunan, misalnya async/await di ES2017 |
Kenapa ES6 penting buat kamu?
- Framework modern memakainya. Tutorial React, Vue, dan Angular penuh dengan arrow function, destructuring, dan
import. Tanpa paham ES6, kode mereka terasa seperti bahasa asing. - Didukung di mana-mana. Semua browser modern dan Node.js sudah mendukung ES6 secara native.
- Kode lebih rapi dan aman.
let/constmencegah bug scope klasik, module membuat kode terbagi per file, Promise merapikan kode asynchronous.
Anggap ES6 sebagai "bahasa sehari-hari" JavaScript sekarang. Kode gaya ES5 tetap jalan, tapi kamu akan jarang menulisnya.
let, const, dan var
Sebelum ES6, satu-satunya cara membuat variabel adalah var. Masalahnya, var punya perilaku yang sering bikin kaget. ES6 menambahkan let dan const dengan aturan lebih ketat.
| Aspek | var | let | const |
|---|---|---|---|
| Scope | Function | Block | Block |
| Boleh dideklarasi ulang | Ya | Tidak | Tidak |
| Boleh diisi ulang | Ya | Ya | Tidak |
| Akses sebelum deklarasi | undefined | ReferenceError (TDZ) | ReferenceError (TDZ) |
| Wajib diberi nilai awal | Tidak | Tidak | Ya |
Block scope
Block adalah apa pun yang diapit { }: isi if, for, atau sekadar kurung kurawal. Variabel let dan const hanya hidup di dalam block tempat ia dibuat. var mengabaikan block dan "bocor" ke seluruh fungsi.
Contoh bug klasik dengan var di dalam loop:
Dengan var, hanya ada satu i untuk seluruh loop, dan saat fungsi dipanggil nilainya sudah 3. Dengan let, setiap putaran mendapat j baru.
const bukan berarti isinya beku
const melarang variabelnya diisi ulang, tapi isi objek atau array tetap bisa diubah.
Aturan praktis: pakai const sebagai default, ganti ke let hanya kalau nilainya memang perlu diganti, dan hindari var.
Hoisting dan Temporal Dead Zone
Hoisting artinya JavaScript sudah "mencatat" semua deklarasi variabel di sebuah scope sebelum menjalankan baris pertamanya. Ibarat guru yang sudah pegang daftar absen sebelum murid masuk kelas.
Bedanya ada di apa yang terjadi kalau variabel dipakai sebelum barisnya:
vardicatat dan langsung diberi nilaiundefined. Tidak error, tapi diam-diam salah.letdanconstjuga dicatat, tapi belum boleh disentuh sampai baris deklarasinya dijalankan. Rentang dari awal block sampai baris deklarasi itu disebut Temporal Dead Zone (TDZ).
TDZ sebenarnya membantu: error yang jelas jauh lebih baik daripada undefined yang menyusup ke perhitunganmu.
Arrow function
Arrow function adalah cara singkat menulis fungsi.
Implicit return
Kalau badan fungsi hanya satu ekspresi tanpa kurung kurawal, hasilnya otomatis di-return. Begitu kamu memakai { }, kamu wajib menulis return sendiri.
this leksikal
Fungsi biasa menentukan this dari cara ia dipanggil. Arrow function tidak punya this sendiri; ia memakai this dari tempat ia ditulis. Ini sangat berguna untuk callback di dalam method.
Kalau callback di atas ditulis dengan function () { ... }, this di dalamnya bukan timer lagi dan kodenya gagal. Sebaliknya, karena tidak punya this sendiri, arrow function jangan dipakai sebagai method objek yang butuh this. Arrow function juga tidak bisa dipanggil dengan new dan tidak punya objek arguments.
Template literals
Template literal memakai backtick (`), bukan kutip.
Tagged template singkat
Kalau sebuah fungsi ditulis tepat di depan template literal, fungsi itu menerima potongan teks dan nilai sisipan secara terpisah, lalu bebas mengolahnya.
Di sini strings berisi ["Mahasiswa ", " mendapat nilai ", "."] dan values berisi ["Dini", 95]. Library seperti styled-components dan graphql-tag memakai teknik ini.
Kesalahan umum
- Memakai
vardi loop yang membuat callback, lalu heran semua hasilnya sama. - Mengira
constmembuat objek tidak bisa diubah. Yang dikunci hanya variabelnya. - Lupa
returnsaat arrow function memakai{ }. - Mengembalikan objek tanpa kurung:
() => { nama: "A" }dianggap block, hasilnyaundefined. - Memakai arrow function sebagai method yang butuh
this. - Menulis
${}di dalam kutip biasa."Halo ${nama}"tetap tercetak apa adanya; harus pakai backtick.
Rangkuman
- ES6 (ES2015) adalah pembaruan terbesar JavaScript dan fondasi framework modern; sejak itu ECMAScript rilis tiap tahun.
letdanconstbersifat block scope dan punya TDZ;varfunction scope dan di-hoist sebagaiundefined.- Default pakai
const,letkalau perlu diisi ulang, hindarivar. - Arrow function lebih ringkas, punya implicit return, dan mewarisi
thisdari tempat ia ditulis. - Template literal memakai backtick, mendukung
${ekspresi}dan multi-line; tagged template mengolah potongan teks dan nilainya lewat fungsi.
Slide 15 sampai 23 dari deck JavaScript. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: Rapikan kode lama dengan gaya ES6
Lengkapi tiga fungsi berikut memakai fitur ES6:
formatPesanan(nama, harga, qty)mengembalikan teks dengan template literal, format"<nama> x<qty> = Rp<harga * qty>". Contoh:formatPesanan("Kopi", 15000, 2)menghasilkan"Kopi x2 = Rp30000".kuadratSemua(angka)mengembalikan array baru berisi kuadrat setiap angka, pakaimapdengan arrow function. Contoh:kuadratSemua([1, 2, 3])menghasilkan[1, 4, 9].buatPenghitung()mengembalikan array berisi 3 fungsi. Fungsi ke-0 mengembalikan 0, ke-1 mengembalikan 1, ke-2 mengembalikan 2. Kode awalnya memakaivardan semua fungsi mengembalikan 3. Perbaiki.
Cek pemahaman
1ECMAScript 6 juga dikenal dengan nama apa?
2Apa yang ditampilkan kode berikut?
const fns = []; for (var i = 0; i < 3; i++) { fns.push(() => i); } console.log(fns.map((f) => f()).join(","));3Apa yang ditampilkan kode berikut?
const a = (x) => { x * 2; }; const b = (x) => x * 2; console.log(a(4), b(4));4Array yang disimpan di variabel const tetap bisa ditambah isinya dengan push.
