0Pricing
JavaScript Academy · Pelajaran

this Leksikal vs Dinamis, Meninjau Kembali Arrow

Lihat bagaimana this dinamis bergantung pada lokasi pemanggilan, sedangkan fungsi arrow menangkap this leksikal; gunakan contoh kecil yang jelas

this Leksikal vs Dinamis, Meninjau Kembali Arrow adalah pelajaran JavaScript Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar JavaScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus JavaScript Academy mencakup 3 pelajaran total.

Gambaran umum

Tujuan: Pahami ke mana this merujuk.

  • this dinamis: ditentukan oleh lokasi pemanggilan
  • this pada fungsi panah: ditangkap secara leksikal
  • Jebakan umum: ekstraksi metode menghilangkan this
  • Gunakan fungsi panah untuk mempertahankan this di dalam fungsi panggilan balik
this Leksikal vs Dinamis, Meninjau Kembali Arrow — ilustrasi 1

Demo this dinamis

this dinamis: pemanggilan sebagai obj.method() menetapkan this = obj; mengekstrak fungsi tersebut menghilangkan objeknya.

// Dynamic this depends on HOW we call the function
const person = {
  name: "Ayla",
  say: function () {
    return "Hi " + this.name;
  }
};

console.log("method call:", person.say()); // "Hi Ayla"

// Extract then call: this is lost
const talk = person.say;
console.log("extracted call:", talk()); // likely "Hi undefined" in strict mode -> this is undefined
this Leksikal vs Dinamis, Meninjau Kembali Arrow — ilustrasi 2

Fungsi panah = this leksikal

Fungsi panah mengambil this dari fungsi atau lingkup objek di sekitarnya saat dibuat; nilainya tidak berubah saat dipanggil.

// Arrow functions capture this from where they are created
const box = {
  label: "blue",
  showLater: function () {
    // Arrow keeps this === box
    const fn = () => "box:" + this.label;
    return fn();
  }
};

console.log("arrow captured this:", box.showLater()); // "box:blue"
this Leksikal vs Dinamis, Meninjau Kembali Arrow — ilustrasi 3

Fungsi panggilan balik: pertahankan this dengan fungsi panah

Dalam fungsi panggilan balik, fungsi biasa sering kehilangan this; fungsi panah mempertahankan this dari lingkup luar.

// Using a normal function in a callback can lose this
const widget = {
  id: 7,
  normal: function () {
    setTimeout(function () {
      // here this is not widget in many environments
      console.log("normal cb this.id:", this && this.id);
    }, 0);
  },
  arrow: function () {
    setTimeout(() => {
      // arrow keeps lexical this from arrow()
      console.log("arrow cb this.id:", this.id);
    }, 0);
  }
};

widget.normal();
widget.arrow();
this Leksikal vs Dinamis, Meninjau Kembali Arrow — ilustrasi 4

Perbaikan sederhana untuk ekstraksi

Jika metode diekstrak, bungkuslah dengan fungsi panah kecil yang menangkap objek, atau ikat dengan bind (pelajaran berikutnya). Buatlah tetap sederhana bagi pemula.

// If you must extract, wrap with an arrow capturing the object
const account = {
  owner: "Mila",
  label: function () { return "Owner:" + this.owner; }
};

// Lost this:
const lost = account.label;
console.log("lost:", lost()); // "Owner:undefined" (this missing)

// Fixed: create an arrow that closes over account
const safe = () => account.label();
console.log("fixed via arrow wrapper:", safe());
this Leksikal vs Dinamis, Meninjau Kembali Arrow — ilustrasi 5

Kebiasaan baik

Kiat:

  • Metode: panggil dengan obj.method() agar this menjadi objek tersebut.
  • Fungsi panggilan balik: utamakan fungsi panah untuk mempertahankan this leksikal.
  • Metode yang diekstrak kehilangan this; bungkus dengan fungsi panah atau bind.
this Leksikal vs Dinamis, Meninjau Kembali Arrow — ilustrasi 6

Kuis this pada fungsi panah

Pemeriksaan singkat: Perilaku this pada fungsi panah.

this Leksikal vs Dinamis, Meninjau Kembali Arrow — ilustrasi 7

Ringkasan

Ringkasan: this bersifat dinamis untuk fungsi biasa (ditetapkan oleh lokasi pemanggilan) dan leksikal untuk fungsi panah (ditangkap saat dibuat). Gunakan fungsi panah dalam fungsi panggilan balik dan bungkus metode yang diekstrak agar perilakunya tetap sederhana.

this Leksikal vs Dinamis, Meninjau Kembali Arrow — ilustrasi 8

Pertanyaan yang Sering Diajukan

Apakah pelajaran “this Leksikal vs Dinamis, Meninjau Kembali Arrow” gratis?

Ya — teks lengkap “this Leksikal vs Dinamis, Meninjau Kembali Arrow” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus JavaScript Academy, upgrade ke CoddyKit PRO. Kursus JavaScript Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “this Leksikal vs Dinamis, Meninjau Kembali Arrow”?

Lihat bagaimana this dinamis bergantung pada lokasi pemanggilan, sedangkan fungsi arrow menangkap this leksikal; gunakan contoh kecil yang jelas Kamu berlatih JavaScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai JavaScript Academy?

Tidak diperlukan pengalaman sebelumnya. JavaScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 3.

Berapa lama pelajaran “this Leksikal vs Dinamis, Meninjau Kembali Arrow” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran JavaScript Academy ini?

Ya. Setiap pelajaran JavaScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. this Leksikal vs Dinamis, Meninjau Kembali Arrow
  2. Jebakan Ekstraksi Metode, Penerapan Parsial
  3. Alternatif Fungsional — Meneruskan Konteks, Closure, Pembantu Kecil
← Kembali ke JavaScript Academy