Bolehkah Anda Mengisytiharkan Fungsi Di Dalam Pernyataan Bersyarat dalam JavaScript?

DDD
Lepaskan: 2024-11-01 15:10:02
asal
501 orang telah melayarinya

Can You Declare Functions Inside Conditional Statements in JavaScript?

Pengisytiharan Fungsi dalam Pernyataan Bersyarat

Dalam JavaScript, pengisytiharan fungsi mempunyai gelagat berbeza bergantung pada piawaian bahasa lazim dan persekitaran di mana ia dilaksanakan.

Dalam Mod Tegas (ES5)

Dalam mod ketat, diperkenalkan dalam ECMAScript 5 (ES5), pengisytiharan fungsi tidak dibenarkan dalam pernyataan bersyarat. Ini kerana pengisytiharan fungsi mencipta pembolehubah dinaikkan, yang diskop kepada keseluruhan fungsi atau skop global. Meletakkannya dalam pernyataan bersyarat akan memecahkan mekanisme angkat ini.

Mod Tidak Tegas (ES5)

Dalam mod tidak ketat, walau bagaimanapun, kelakuan pengisytiharan fungsi dalam pernyataan bersyarat tidak dapat diramalkan. Penyemak imbas dan enjin JavaScript yang berbeza melaksanakan peraturan mereka sendiri untuk mengendalikan situasi ini, yang membawa kepada hasil yang tidak konsisten.

Dalam JavaScript Moden (ES2015)

Sehingga 2018, kebanyakan penyemak imbas moden menyokong ECMAScript 2015 (ES2015), yang memperkenalkan tafsiran yang lebih ketat bagi pengisytiharan fungsi dalam blok. Dalam ES2015, pengisytiharan fungsi diskop kepada blok di mana ia diisytiharkan.

Contoh:

Pertimbangkan kod berikut:

<code class="javascript">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>
Salin selepas log masuk

Dalam mod ketat atau dalam ES2015, kod ini akan mengakibatkan ralat kerana fungsi a tidak ditakrifkan dalam skop global. Walau bagaimanapun, dalam mod tidak ketat, ia mungkin menghasilkan output yang berbeza bergantung pada pelaksanaan. Dalam contoh yang diberikan, Chrome mengeluarkan "foo" manakala Firefox mengeluarkan "19".

Cadangan:

Untuk mengelakkan tingkah laku yang tidak dijangka, adalah disyorkan untuk menggunakan ungkapan fungsi sebaliknya pengisytiharan fungsi apabila mentakrifkan fungsi secara bersyarat. Ungkapan fungsi mencipta fungsi berskop yang hanya boleh diakses dalam skop terdekatnya.

Atas ialah kandungan terperinci Bolehkah Anda Mengisytiharkan Fungsi Di Dalam Pernyataan Bersyarat 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!