Bagaimanakah Gelagat Pengisytiharan Fungsi Dalam Pernyataan If/Else Berubah dalam JavaScript?

DDD
Lepaskan: 2024-10-31 06:16:02
asal
255 orang telah melayarinya

How Has the Behavior of Function Declarations Within If/Else Statements Changed in JavaScript?

Pengisytiharan Fungsi Dalam Pernyataan If/Else: Satu Peperiksaan

Dalam JavaScript, pengisytiharan fungsi secara tradisinya dikendalikan secara berbeza dalam pernyataan if/else. Pada era pra-ES5, fungsi yang diisytiharkan dalam blok if boleh diakses di luar blok tanpa mengira keadaan blok.

<code class="js">var abc = '';
if (1 === 0) {
  function a() {...}
} else if ('a' === 'a') {
  function a() {...}
}
a(); // Accesses the function declared inside one of the if blocks</code>
Salin selepas log masuk

Tingkah laku ini berbeza-beza merentas pelayar dan boleh membawa kepada hasil yang tidak dijangka. Untuk menyelesaikan ketidakkonsistenan ini, mod ketat dalam ES5 memperkenalkan peraturan: pengisytiharan fungsi mesti berada di peringkat teratas skrip atau modul. Meletakkannya dalam blok akan mengakibatkan ralat sintaks.

Walau bagaimanapun, dengan kemunculan ES2015, landskap telah berubah. Dalam persekitaran JavaScript moden, pengisytiharan fungsi dalam blok kini sah dan berskop dalam blok tersebut. Sebagai contoh, dalam kod berikut:

<code class="js">var abc = '';
if (1 === 0) {
  function a() {...}
} else if ('a' === 'a') {
  function a() {...}
}
a(); // Undefined function error</code>
Salin selepas log masuk

Fungsi a diisytiharkan dalam skop pernyataan if, jadi ia tidak boleh diakses di luarnya.

Oleh itu, jika anda perlu mentakrifkan fungsi secara bersyarat, adalah disyorkan untuk menggunakan ungkapan fungsi dan bukannya pengisytiharan. Ungkapan fungsi boleh ditakrifkan di mana-mana dalam kod dan boleh menangkap nilai pembolehubah dalam skop semasa.

<code class="js">var abc = '';
if (1 === 0) {
  var a = function () {...};
} else if ('a' === 'a') {
  var a = function () {...};
}
a();</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Gelagat Pengisytiharan Fungsi Dalam Pernyataan If/Else Berubah dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan