Dasar JavaScript: Variabel Global & Lokal, Menghubungkan ke HTML, dan DOM
JavaScript adalah bahasa pemrograman yang kuat yang memungkinkan Anda membuat halaman web interaktif dan dinamis. Memahami dasar-dasarnya sangat penting untuk setiap pengembang web. Artikel ini akan membahas konsep-konsep penting seperti variabel global dan lokal, cara menghubungkan JavaScript ke HTML, dan Model Objek Dokumen (DOM).
Mengapa Mempelajari Dasar-Dasar JavaScript?
- Landasan yang Kuat: Memahami dasar-dasarnya menyediakan landasan yang kuat untuk mempelajari konsep JavaScript yang lebih maju.
- Pengembangan Web Interaktif: JavaScript memungkinkan Anda menambahkan interaktivitas ke situs web Anda, menjadikannya lebih menarik bagi pengguna.
- Pengembangan Front-End: JavaScript adalah bahasa utama untuk pengembangan front-end, yang memungkinkan Anda mengontrol perilaku dan tampilan antarmuka pengguna.
- Pengembangan Back-End (Node.js): Dengan Node.js, Anda dapat menggunakan JavaScript untuk mengembangkan aplikasi back-end, menjadikannya bahasa yang serbaguna.
- Banyak Kerangka Kerja dan Pustaka: Memahami dasar-dasarnya akan membantu Anda bekerja secara efektif dengan berbagai kerangka kerja dan pustaka JavaScript seperti React, Angular, dan Vue.js.
Variabel di JavaScript
Variabel adalah wadah untuk menyimpan nilai data. Di JavaScript, Anda dapat mendeklarasikan variabel menggunakan kata kunci `var`, `let`, atau `const`. Pemahaman tentang cakupan variabel sangat penting untuk menulis kode yang bebas kesalahan.
Variabel Global
Variabel global dideklarasikan di luar fungsi atau blok kode apa pun. Mereka dapat diakses dari bagian mana pun dari kode Anda.
Cara Mendeklarasikan Variabel Global
Anda dapat mendeklarasikan variabel global dengan dua cara:
-
Di luar fungsi:
var globalVariable = "Saya adalah variabel global"; function myFunction() { console.log(globalVariable); // Dapat diakses di sini } myFunction();
-
Tanpa mendeklarasikan (tidak disarankan): Jika Anda menetapkan nilai ke variabel tanpa menggunakan `var`, `let`, atau `const` di dalam fungsi, itu akan secara otomatis menjadi variabel global. Ini **sangat tidak disarankan** karena dapat menyebabkan masalah yang tidak terduga.
function myFunction() { imAVariable = "Saya secara tidak sengaja menjadi global"; // JANGAN LAKUKAN INI } myFunction(); console.log(imAVariable); // Dapat diakses di sini
Menggunakan pendekatan ini dapat dengan mudah menyebabkan bentrokan dengan variabel lain dan membuat kode Anda sulit di-debug.
Keuntungan dan Kerugian Variabel Global
- Keuntungan:
- Mudah diakses dari seluruh kode Anda.
- Kerugian:
- Dapat menyebabkan bentrokan nama jika Anda menggunakan nama variabel yang sama di tempat yang berbeda dalam kode Anda.
- Dapat membuat kode Anda sulit di-debug karena nilai variabel dapat berubah di mana saja dalam kode Anda.
- Dapat mengurangi kinerja karena JavaScript harus mencari variabel di seluruh cakupan global.
Variabel Lokal
Variabel lokal dideklarasikan di dalam fungsi atau blok kode. Mereka hanya dapat diakses dari dalam fungsi atau blok tempat mereka dideklarasikan.
Cara Mendeklarasikan Variabel Lokal
Anda mendeklarasikan variabel lokal menggunakan `var`, `let`, atau `const` di dalam fungsi atau blok kode.
-
Menggunakan `var`:
function myFunction() { var localVariable = "Saya adalah variabel lokal"; console.log(localVariable); // Dapat diakses di sini } myFunction(); // console.log(localVariable); // Akan menghasilkan kesalahan (tidak terdefinisi)
-
Menggunakan `let` dan `const` (cakupan blok): `let` dan `const` memiliki cakupan blok, artinya mereka hanya dapat diakses di dalam blok kode tempat mereka dideklarasikan (biasanya di dalam kurung kurawal `{}`).
function myFunction() { if (true) { let blockVariable = "Saya adalah variabel blok"; const blockConstant = 10; console.log(blockVariable); // Dapat diakses di sini console.log(blockConstant); // Dapat diakses di sini } // console.log(blockVariable); // Akan menghasilkan kesalahan (tidak terdefinisi) // console.log(blockConstant); // Akan menghasilkan kesalahan (tidak terdefinisi) } myFunction();
Keuntungan dan Kerugian Variabel Lokal
- Keuntungan:
- Membantu menghindari bentrokan nama karena variabel hanya dapat diakses di dalam fungsi atau blok tempat mereka dideklarasikan.
- Membuat kode Anda lebih mudah di-debug karena Anda tahu di mana variabel dapat berubah.
- Meningkatkan kinerja karena JavaScript hanya perlu mencari variabel di cakupan lokal.
- Kerugian:
- Tidak dapat diakses dari luar fungsi atau blok tempat mereka dideklarasikan, yang mungkin membatasi dalam beberapa kasus.
`var`, `let`, dan `const`: Perbedaan Utama
Ketiga kata kunci ini digunakan untuk mendeklarasikan variabel, tetapi mereka memiliki perbedaan penting:
- `var`:
- Cakupan fungsi: Variabel yang dideklarasikan dengan `var` memiliki cakupan fungsi. Artinya, mereka dapat diakses di seluruh fungsi tempat mereka dideklarasikan (atau secara global jika dideklarasikan di luar fungsi apa pun).
- Hoisting: Variabel yang dideklarasikan dengan `var` diangkat ke bagian atas cakupan mereka. Artinya, Anda dapat menggunakan variabel sebelum mendeklarasikannya, tetapi nilainya akan menjadi `undefined`.
- Dapat dideklarasikan ulang dan ditetapkan ulang: Anda dapat mendeklarasikan ulang dan menetapkan ulang variabel yang dideklarasikan dengan `var`.
- `let`:
- Cakupan blok: Variabel yang dideklarasikan dengan `let` memiliki cakupan blok. Artinya, mereka hanya dapat diakses di dalam blok tempat mereka dideklarasikan.
- Hoisting: Variabel yang dideklarasikan dengan `let` diangkat, tetapi tidak diinisialisasi. Artinya, Anda tidak dapat menggunakan variabel sebelum mendeklarasikannya, atau Anda akan mendapatkan kesalahan `ReferenceError`. (Ini dikenal sebagai “zona temporal mati” atau TDZ).
- Dapat ditetapkan ulang tetapi tidak dideklarasikan ulang dalam cakupan yang sama: Anda dapat menetapkan ulang variabel yang dideklarasikan dengan `let`, tetapi Anda tidak dapat mendeklarasikannya ulang dalam cakupan yang sama.
- `const`:
- Cakupan blok: Variabel yang dideklarasikan dengan `const` memiliki cakupan blok, seperti `let`.
- Hoisting: Variabel yang dideklarasikan dengan `const` diangkat, tetapi tidak diinisialisasi (zona temporal mati atau TDZ).
- Tidak dapat ditetapkan ulang dan tidak dapat dideklarasikan ulang: Anda tidak dapat menetapkan ulang atau mendeklarasikan ulang variabel yang dideklarasikan dengan `const`. Artinya, variabel `const` harus diinisialisasi ketika dideklarasikan, dan nilainya tidak dapat diubah setelahnya. Namun, jika `const` memegang objek atau array, *properti* objek atau elemen array dapat diubah.
Contoh Ilustratif
// var
function varExample() {
var x = 10;
if (true) {
var x = 20; // Mendeklarasikan ulang x!
console.log(x); // 20
}
console.log(x); // 20 (nilai x telah diubah di dalam blok if)
}
varExample();
// let
function letExample() {
let y = 10;
if (true) {
let y = 20; // Mendeklarasikan variabel y yang *berbeda* dalam cakupan blok ini.
console.log(y); // 20
}
console.log(y); // 10 (nilai y tidak terpengaruh oleh blok if)
}
letExample();
// const
function constExample() {
const z = 10;
// z = 20; // Akan menghasilkan kesalahan: Assignment to constant variable.
const obj = { value: 10 };
obj.value = 20; // Valid: Kita mengubah properti objek, bukan variabel const itu sendiri.
console.log(obj.value); // 20
// obj = { value: 30 }; // Akan menghasilkan kesalahan: Assignment to constant variable.
}
constExample();
Praktik Terbaik
- Gunakan `const` untuk variabel yang nilainya tidak boleh berubah.
- Gunakan `let` untuk variabel yang nilainya mungkin berubah.
- Hindari menggunakan `var` di kode modern. `let` dan `const` memberikan cakupan yang lebih jelas dan membantu mencegah kesalahan.
- Deklarasikan variabel sedekat mungkin dengan tempat mereka digunakan untuk meningkatkan keterbacaan.
Menghubungkan JavaScript ke HTML
Untuk menjalankan kode JavaScript di halaman web Anda, Anda perlu menghubungkannya ke file HTML Anda. Ada dua cara utama untuk melakukan ini:
- JavaScript Sebaris: Menulis kode JavaScript langsung di dalam tag HTML. Meskipun sederhana untuk contoh kecil, ini tidak disarankan untuk kode yang lebih besar karena membuat HTML Anda berantakan dan sulit dikelola.
- File JavaScript Eksternal: Menyimpan kode JavaScript Anda dalam file terpisah (dengan ekstensi `.js`) dan menautkannya ke file HTML Anda. Ini adalah praktik terbaik karena membuat HTML dan JavaScript Anda terpisah, sehingga kode Anda lebih terorganisir dan mudah dikelola.
JavaScript Sebaris
Anda dapat menambahkan kode JavaScript sebaris ke tag HTML menggunakan atribut seperti `onclick`, `onload`, atau `onmouseover`.
Contoh
<button onclick="alert('Tombol diklik!')">Klik Saya</button>
Ketika tombol ini diklik, fungsi `alert()` akan dijalankan, dan kotak pesan akan ditampilkan.
Kapan Menggunakan JavaScript Sebaris
JavaScript sebaris paling baik digunakan untuk potongan kode kecil yang sederhana. Hindari menggunakannya untuk kode yang lebih besar karena membuat HTML Anda sulit dibaca dan dipelihara.
File JavaScript Eksternal
Cara terbaik untuk menghubungkan JavaScript ke HTML adalah dengan menggunakan file eksternal. Simpan kode JavaScript Anda dalam file terpisah dengan ekstensi `.js`, lalu tautkan file tersebut ke file HTML Anda menggunakan tag `<script>`.
Cara Menautkan File JavaScript Eksternal
-
Buat file JavaScript: Buat file baru bernama `script.js` (atau nama lain yang Anda pilih) dan simpan kode JavaScript Anda di dalamnya.
// script.js console.log("Halo dari file JavaScript eksternal!"); function myFunction() { alert("Fungsi dipanggil dari file eksternal!"); }
-
Tautkan file JavaScript di HTML Anda: Tambahkan tag `<script>` ke file HTML Anda, dan atur atribut `src` ke jalur ke file JavaScript Anda. Sebaiknya letakkan tag `<script>` tepat sebelum tag penutup `</body>`. Ini memastikan bahwa HTML telah diparse sebelum JavaScript dieksekusi.
<!DOCTYPE html> <html> <head> <title>Menghubungkan JavaScript</title> </head> <body> <h1>Halo, Dunia!</h1> <button onclick="myFunction()">Klik Saya</button> <script src="script.js"></script> </body> </html>
Keuntungan Menggunakan File JavaScript Eksternal
- Keterpisahan Kekhawatiran: Membuat HTML dan JavaScript Anda terpisah membuat kode Anda lebih terorganisir dan mudah dikelola.
- Kode yang Dapat Digunakan Kembali: Anda dapat menggunakan kembali file JavaScript yang sama di beberapa halaman web.
- Cache: Browser dapat menyimpan file JavaScript yang terpisah, yang dapat meningkatkan kinerja situs web Anda.
- Keterbacaan: Kode Anda lebih mudah dibaca dan dipahami.
Praktik Terbaik untuk Menghubungkan JavaScript
- Tempatkan tag `<script>` tepat sebelum tag penutup `</body>`. Ini memastikan bahwa HTML telah diparse sebelum JavaScript dieksekusi.
- Gunakan atribut `defer` atau `async` pada tag `<script>` untuk mengontrol bagaimana skrip dimuat dan dieksekusi.
- Atribut `defer` menunda eksekusi skrip hingga HTML telah diparse. Skrip akan dieksekusi dalam urutan yang sama seperti yang muncul di HTML.
- Atribut `async` memuat skrip secara asinkron, yang berarti bahwa skrip dimuat secara paralel dengan HTML. Skrip akan dieksekusi segera setelah dimuat, yang mungkin tidak sesuai urutan seperti yang muncul di HTML.
Model Objek Dokumen (DOM)
DOM adalah representasi berbasis pohon dari dokumen HTML atau XML. Ini memungkinkan JavaScript untuk mengakses dan memanipulasi struktur, gaya, dan konten dokumen. DOM memperlakukan setiap elemen HTML sebagai objek, yang dapat diakses dan dimodifikasi menggunakan JavaScript.
Struktur DOM
DOM mewakili dokumen HTML sebagai hierarki node. Node teratas adalah node dokumen, yang mewakili seluruh dokumen HTML. Node dokumen memiliki node anak, seperti node elemen (mewakili tag HTML), node teks (mewakili teks di dalam tag HTML), dan node atribut (mewakili atribut tag HTML).
Contoh Struktur DOM
<!DOCTYPE html>
<html>
<head>
<title>Contoh DOM</title>
</head>
<body>
<h1 id="myHeading">Halo, Dunia!</h1>
<p>Ini adalah paragraf.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</body>
</html>
Struktur DOM untuk HTML di atas adalah sebagai berikut:
- document (node dokumen)
- html (node elemen)
- head (node elemen)
- title (node elemen)
- “Contoh DOM” (node teks)
- title (node elemen)
- body (node elemen)
- h1 (node elemen)
- Atribut: id=”myHeading” (node atribut)
- “Halo, Dunia!” (node teks)
- p (node elemen)
- “Ini adalah paragraf.” (node teks)
- ul (node elemen)
- li (node elemen)
- “Item 1” (node teks)
- li (node elemen)
- “Item 2” (node teks)
- li (node elemen)
- h1 (node elemen)
- head (node elemen)
- html (node elemen)
Mengakses Elemen DOM
JavaScript menyediakan beberapa metode untuk mengakses elemen DOM:
- `document.getElementById(id)`: Mengembalikan elemen dengan ID yang ditentukan.
- `document.getElementsByClassName(className)`: Mengembalikan koleksi HTML dari semua elemen dengan nama kelas yang ditentukan.
- `document.getElementsByTagName(tagName)`: Mengembalikan koleksi HTML dari semua elemen dengan nama tag yang ditentukan.
- `document.querySelector(selector)`: Mengembalikan elemen pertama yang cocok dengan pemilih CSS yang ditentukan.
- `document.querySelectorAll(selector)`: Mengembalikan NodeList dari semua elemen yang cocok dengan pemilih CSS yang ditentukan.
Contoh
<!DOCTYPE html>
<html>
<head>
<title>Mengakses Elemen DOM</title>
</head>
<body>
<h1 id="myHeading">Halo, Dunia!</h1>
<p class="myParagraph">Ini adalah paragraf.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
<script>
// Mengakses elemen berdasarkan ID
const heading = document.getElementById("myHeading");
console.log(heading.textContent); // Output: Halo, Dunia!
// Mengakses elemen berdasarkan nama kelas
const paragraphs = document.getElementsByClassName("myParagraph");
console.log(paragraphs[0].textContent); // Output: Ini adalah paragraf.
// Mengakses elemen berdasarkan nama tag
const listItems = document.getElementsByTagName("li");
console.log(listItems.length); // Output: 2
// Menggunakan querySelector
const heading2 = document.querySelector("#myHeading");
console.log(heading2.textContent); // Output: Halo, Dunia!
// Menggunakan querySelectorAll
const paragraphs2 = document.querySelectorAll(".myParagraph");
console.log(paragraphs2[0].textContent); // Output: Ini adalah paragraf.
</script>
</body>
</html>
Memanipulasi Elemen DOM
Setelah Anda mengakses elemen DOM, Anda dapat memanipulasinya menggunakan properti dan metode JavaScript. Beberapa operasi manipulasi DOM umum meliputi:
- Mengubah Konten Teks: Menggunakan properti `textContent` atau `innerHTML` untuk mengubah konten teks elemen.
- Mengubah Atribut: Menggunakan metode `setAttribute()` untuk mengubah nilai atribut elemen.
- Mengubah Gaya: Menggunakan properti `style` untuk mengubah gaya CSS elemen.
- Membuat Elemen Baru: Menggunakan metode `document.createElement()` untuk membuat elemen HTML baru.
- Menambahkan Elemen: Menggunakan metode `appendChild()` atau `insertBefore()` untuk menambahkan elemen baru ke DOM.
- Menghapus Elemen: Menggunakan metode `removeChild()` untuk menghapus elemen dari DOM.
Contoh
<!DOCTYPE html>
<html>
<head>
<title>Memanipulasi Elemen DOM</title>
</head>
<body>
<h1 id="myHeading">Halo, Dunia!</h1>
<p id="myParagraph">Ini adalah paragraf.</p>
<div id="myDiv"></div>
<script>
// Mengubah konten teks
const heading = document.getElementById("myHeading");
heading.textContent = "Halo, JavaScript!";
// Mengubah atribut
const paragraph = document.getElementById("myParagraph");
paragraph.setAttribute("class", "highlight");
// Mengubah gaya
const div = document.getElementById("myDiv");
div.style.width = "200px";
div.style.height = "100px";
div.style.backgroundColor = "lightblue";
// Membuat elemen baru
const newParagraph = document.createElement("p");
newParagraph.textContent = "Ini adalah paragraf baru.";
// Menambahkan elemen
div.appendChild(newParagraph);
// Menghapus elemen (misalnya, paragraf asli)
// paragraph.parentNode.removeChild(paragraph);
</script>
<style>
.highlight {
font-weight: bold;
color: red;
}
</style>
</body>
</html>
Event Listener
Event listener memungkinkan Anda untuk menanggapi tindakan pengguna, seperti klik, pengunggahan mouse, dan pengiriman formulir. Anda dapat melampirkan event listener ke elemen DOM untuk menjalankan kode JavaScript ketika suatu peristiwa terjadi.
Cara Melampirkan Event Listener
- Menggunakan atribut HTML (sebaris): Mirip dengan JavaScript sebaris, ini tidak disarankan untuk kode yang lebih besar.
- Menggunakan properti DOM: Melampirkan event listener ke properti DOM.
- Menggunakan `addEventListener()`: Metode `addEventListener()` adalah cara yang paling direkomendasikan untuk melampirkan event listener. Ini memungkinkan Anda untuk menambahkan beberapa event listener ke elemen yang sama dan mengontrol bagaimana mereka dieksekusi.
Contoh
<!DOCTYPE html>
<html>
<head>
<title>Event Listener</title>
</head>
<body>
<button id="myButton">Klik Saya</button>
<script>
// Menggunakan addEventListener()
const button = document.getElementById("myButton");
button.addEventListener("click", function() {
alert("Tombol diklik!");
});
// Contoh lainnya: Mengubah warna latar belakang saat mouse di atas
button.addEventListener("mouseover", function() {
button.style.backgroundColor = "yellow";
});
button.addEventListener("mouseout", function() {
button.style.backgroundColor = ""; // Kembali ke warna default
});
</script>
</body>
</html>
Event yang Umum
- `click`: Terjadi ketika elemen diklik.
- `mouseover`: Terjadi ketika pointer mouse bergerak ke atas elemen.
- `mouseout`: Terjadi ketika pointer mouse bergerak keluar dari elemen.
- `keydown`: Terjadi ketika tombol ditekan.
- `keyup`: Terjadi ketika tombol dilepaskan.
- `submit`: Terjadi ketika formulir dikirimkan.
- `load`: Terjadi ketika halaman web telah selesai dimuat.
- `DOMContentLoaded`: Terjadi ketika dokumen HTML telah selesai diparse. Lebih disukai daripada `load` karena tidak menunggu gambar dan sumber daya eksternal lainnya dimuat.
Kesimpulan
Dalam artikel ini, kita telah membahas dasar-dasar JavaScript, termasuk variabel global dan lokal, cara menghubungkan JavaScript ke HTML, dan Model Objek Dokumen (DOM). Memahami konsep-konsep ini sangat penting untuk membangun aplikasi web interaktif dan dinamis. Dengan berlatih dan bereksperimen dengan konsep-konsep ini, Anda dapat mengembangkan keterampilan JavaScript Anda dan menjadi pengembang web yang mahir.
Langkah Selanjutnya
- Latihan: Buat proyek kecil yang menggunakan konsep-konsep yang telah Anda pelajari.
- Dokumentasi: Selalu rujuk ke dokumentasi resmi JavaScript (MDN Web Docs) untuk pemahaman yang lebih mendalam.
- Komunitas: Bergabunglah dengan komunitas online untuk mengajukan pertanyaan dan berbagi pengetahuan.
- Kerangka Kerja dan Pustaka: Setelah Anda memiliki pemahaman yang kuat tentang dasar-dasarnya, jelajahi kerangka kerja dan pustaka seperti React, Angular, dan Vue.js.
“`