Pengisytiharan Fungsi Dalam Pernyataan Bersyarat: Kajian Kes
Soalan ini berkisar tentang kelakuan pengisytiharan fungsi apabila bersarang dalam pernyataan if/else. Secara tradisinya dalam JavaScript, pengisytiharan fungsi dinaikkan dan mempunyai skop global, tanpa mengira kedudukan fizikalnya dalam kod. Dalam mod ketat ES5, pengisytiharan fungsi dihadkan kepada skop peringkat atas atau dalam fungsi. Mod tidak ketat mempunyai tingkah laku yang tidak dapat diramalkan, mengakibatkan ketidakkonsistenan antara penyemak imbas.
Dalam contoh yang diberikan:
<code class="js">var abc = ''; if (1 === 0) { function a() { abc = 7; } } else if ('a' === 'a') { function a() { abc = 19; } } else if ('foo' === 'bar') { function a() { abc = 'foo'; } } a(); document.write(abc); //writes "foo" even though 'foo' !== 'bar'</code>
Dalam JavaScript moden (ES2015 dan lebih baharu), pengisytiharan fungsi dalam blok kini dibenarkan . Walau bagaimanapun, ia adalah skop kepada blok di mana ia diisytiharkan. Ini bermakna dalam contoh di atas:
Kepada mentakrifkan fungsi secara bersyarat, adalah disyorkan untuk menggunakan ungkapan fungsi dan bukannya pengisytiharan fungsi. Ini memastikan bahawa skop fungsi ditakrifkan dengan jelas dan boleh diramal.
Atas ialah kandungan terperinci Bolehkah Pengisytiharan Fungsi Dalam Pernyataan Bersyarat Membawa kepada Gelagat Tidak Dijangka dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!