Pengisytiharan Fungsi: Perbandingan Persekitaran Ketat dan Tidak Ketat
Pengendalian pengisytiharan fungsi di dalam pernyataan if/else telah berkembang dari semasa ke semasa , membawa kepada gelagat berbeza dalam penyemak imbas.
Mod Tegas ES5
Dalam mod ketat, pengisytiharan fungsi dalam blok tidak dibenarkan. Sebarang percubaan untuk mengisytiharkan fungsi dalam pernyataan if, seperti yang ditunjukkan dalam soalan, akan mengakibatkan ralat sintaks.
Mod Tidak Tegas ES5
Dalam bukan- mod ketat, tingkah laku pengisytiharan fungsi dalam blok adalah tidak konsisten. Pelayar dan enjin yang berbeza mempunyai tafsiran mereka sendiri. Sesetengah penyemak imbas, seperti Chrome, membenarkan fungsi itu diisytiharkan dan digunakan di luar skop yang dimaksudkan, manakala yang lain, seperti Firefox, menganggap fungsi tersebut sebagai berskop blok dan tidak tersedia di luar blok.
Sekat ES2015 -Fungsi Berskop
Sejak pengenalan ECMAScript 2015 (ES2015), pengisytiharan fungsi dalam blok kini secara eksplisit berskop blok. Ini bermakna fungsi yang diisytiharkan dalam pernyataan if hanya boleh diakses dalam blok if.
Dalam contoh yang diberikan, kod tersebut akan mengakibatkan ralat fungsi tidak ditentukan kerana fungsi a hanya diisytiharkan dalam skop jika pernyataan dan oleh itu tidak boleh diakses dalam skop global.
Pengesyoran
Untuk mentakrifkan fungsi secara bersyarat, adalah disyorkan untuk menggunakan ungkapan fungsi dan bukannya pengisytiharan fungsi. Ungkapan fungsi adalah berskop blok secara lalai dan boleh ditakrifkan dalam penyataan jika diperlukan tanpa menyebabkan kesan sampingan yang tidak diingini.
Atas ialah kandungan terperinci Bagaimanakah Perisytiharan Fungsi Berkelakuan Berbeza dalam Persekitaran Ketat dan Tidak Ketat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!