Rumah >hujung hadapan web >tutorial js >Misteri Pengangkatan dalam JavaScript!

Misteri Pengangkatan dalam JavaScript!

Susan Sarandon
Susan Sarandonasal
2024-12-27 00:39:11745semak imbas

Mystery of Hoisting in JavaScript!

JavaScript penuh dengan keanehan, dan mengangkat adalah salah satu yang cenderung mengelirukan pendatang baru. Tetapi jangan bimbang pada penghujung siaran ini, anda akan mempunyai pemahaman yang jelas tentang angkat, dipermudahkan!

Apa Itu Mengangkat? ?

Pada asasnya, angkat ialah gelagat lalai JavaScript untuk memindahkan pengisytiharan ke bahagian atas skopnya. Ini tidak bermakna kod itu disusun semula secara fizikal—itulah cara enjin JavaScript mentafsirnya.

Fikirkan seperti ini: sebelum JavaScript mula melaksanakan kod anda, ia "menyediakan" dengan memperuntukkan memori untuk semua pembolehubah dan fungsi di hadapan, walaupun sebelum satu baris kod dilaksanakan.

Mitos Biasa Mengenai Angkat

Hanya pembolehubah dinaikkan.
?? Tidak benar
Kedua-dua pengisytiharan fungsi dan pengisytiharan berubah dinaikkan.

Pembolehubah dinaikkan dimulakan secara automatik.
?? Salah lagi
Pembolehubah dinaikkan tetapi tidak dimulakan. Nilai mereka kekal tidak ditentukan sehingga ditetapkan secara eksplisit.

Memahami Mengangkat dengan Contoh ?

1. Pengangkat Boleh Ubah
Mari mulakan dengan pembolehubah yang diisytiharkan menggunakan var:

console.log(greeting); // Output: undefined
var greeting = "Hello, World!";

Apa yang berlaku di sini? JavaScript memperlakukan kod seperti ini semasa pelaksanaan:

var greeting; // Declaration is hoisted
console.log(greeting); // Accesses the variable before initialization
greeting = "Hello, World!"; // Initialization happens here

Tetapi dengan let dan const, ia adalah cerita yang berbeza:

console.log(name); // ReferenceError: Cannot access 'name' before initialization
let name = "Sudhil";

Pembolehubah yang diisytiharkan dengan let atau const dinaikkan, tetapi ia berada dalam "zon mati sementara" (TDZ) sehingga pengisytiharannya ditemui.

2. Fungsi Mengangkat
Pengisytiharan fungsi dinaikkan sepenuhnya, kedua-dua nama dan badannya tersedia sebelum baris pengisytiharan:

sayHello(); // Output: "Hello!"

function sayHello() {
    console.log("Hello!");
}

Walau bagaimanapun, ungkapan fungsi berkelakuan berbeza:

sayHi(); // TypeError: sayHi is not a function

var sayHi = function () {
    console.log("Hi!");
};

Dalam kes ini, pembolehubah sayHi dinaikkan tetapi tidak dimulakan sehingga tugasan dicapai.

3. Pengangkatan Kelas
Kelas berkelakuan serupa dengan let dan const. Mereka dinaikkan tetapi tidak boleh diakses sebelum pengisytiharan mereka.

const instance = new MyClass(); // ReferenceError: Cannot access 'MyClass' before initialization

class MyClass {
    constructor() {
        this.name = "Classy!";
    }
}

Mengapakah Pengangkatan Penting? ?

1. Ramalkan Gelagat
Memahami pengangkatan membantu anda meramalkan cara kod anda akan dijalankan dan mengelakkan perangkap biasa seperti menggunakan pembolehubah sebelum ia dimulakan.

2. Kod Bersih
Untuk mengelakkan kekeliruan, isytiharkan pembolehubah dan fungsi di bahagian atas skopnya. Ini sejajar dengan gelagat angkat JavaScript dan menjadikan kod anda lebih mudah dibaca.

Membungkusnya?

Berikut Perkara Yang Perlu Diingati Mengenai Mengangkat: ?

  • Pengisytiharan (pembolehubah, fungsi dan kelas) dinaikkan; permulaan bukan.
  • var pengisytiharan dinaikkan dengan undefined; biarkan dan kekal dalam zon mati sementara.
  • Pengisytiharan fungsi dinaikkan sepenuhnya, tetapi ungkapan fungsi tidak.
  • Hoisting membantu enjin JavaScript memahami kod anda, tetapi memahami angkat membantu anda menulis kod yang lebih baik.

Terima kasih kerana membaca! ?
Teruskan bereksperimen dengan kebiasaan JavaScript dan nantikan lebih banyak lagi dalam siri ini.?
Selamat Mengekod! ???✨

Atas ialah kandungan terperinci Misteri Pengangkatan dalam JavaScript!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn