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>
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>
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>
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!