Spesifikasi ES6 memperkenalkan fungsi peringkat blok, membenarkan pengisytiharan fungsi dalam blok. Memahami semantik mereka adalah penting untuk pengaturcaraan yang berkesan.
Setting | Visible Outside Block | Hoisted | Hoisting Scope | Temporal Dead Zone |
---|---|---|---|---|
Non-strict, No Web Extensions | No | No | N/A | N/A |
Strict, No Web Extensions | No | Yes | Block Level | Yes |
Non-strict, With Web Extensions | Yes | Yes | Function Level | Before Block |
Strict, With Web Extensions | Yes | Yes | Function Level | Before Block |
"Mod ketat" dalam konteks ini merujuk kepada ketegasan fungsi atau skrip di mana blok yang mengandungi pengisytiharan fungsi muncul, bukan fungsi itu sendiri. "sambungan web" hanya digunakan pada kod ceroboh (tidak ketat) dengan penampilan fungsi "waras" (tiada perlanggaran nama).
Dalam ES6 tulen (tanpa "sambungan web"), pengisytiharan fungsi dalam blok mempunyai semantik yang konsisten tanpa mengira ketegasan. Ia dinaikkan ke bahagian atas blok dan berkelakuan seperti pengisytiharan fungsi biasa.
Dengan "sambungan web," mod ceroboh memperkenalkan semantik tambahan. Perisytiharan fungsi dalam blok dinaikkan ke bahagian atas fungsi lampiran sebagai perisytiharan var, dan objek fungsi diperuntukkan kepada pembolehubah ini apabila perisytiharan fungsi dinilai.
Ini menghasilkan dua pengikatan untuk perkara yang sama pengecam: satu skop fungsi (kelihatan di luar blok) dan satu skop blok (hanya kelihatan dalam blok). Pengikatan skop fungsi dimulakan dengan undefined sehingga fungsi diisytiharkan, pada ketika itu ia diberikan objek fungsi.
Sebelum pengisytiharan fungsi ditemui dalam pelaksanaan blok, pengikatan skop fungsi tidak ditentukan dan mengakses ia akan membuang pengecualian.
Atas ialah kandungan terperinci Bagaimanakah Fungsi Tahap Blok ES6 Berkelakuan dalam Mod Tegas dan Tidak Tegas, dengan dan tanpa Sambungan Web?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!