Rumah >hujung hadapan web >tutorial js >Bagaimanakah Perisytiharan Fungsi Berkelakuan Dalam Pernyataan if/else dalam JavaScript?

Bagaimanakah Perisytiharan Fungsi Berkelakuan Dalam Pernyataan if/else dalam JavaScript?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 01:58:03431semak imbas

How Do Function Declarations Behave Within if/else Statements in JavaScript?

Pengisytiharan Fungsi Dalam Pernyataan if/else

Apabila pengisytiharan fungsi ditemui dalam penyataan if/else, pengendaliannya boleh berbeza-beza bergantung pada JavaScript persekitaran. Dalam coretan kod yang disediakan, pengisytiharan fungsi ditakrifkan di dalam setiap cawangan if/else:

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); // Expected output: foo

Di bawah ECMAScript 5 (ES5), dalam mod tidak ketat, kod di atas menunjukkan tingkah laku yang tidak dapat diramalkan. Penyemak imbas dan enjin yang berbeza mengendalikan pengisytiharan fungsi dalam blok secara berbeza.

Walau bagaimanapun, dalam ECMAScript 2015 (ES2015) dan kemudian, pengisytiharan fungsi dibenarkan dalam blok. Pengisytiharan fungsi dalam blok tersebut diskop kepada blok. Dalam coretan kod, fungsi a diisytiharkan dalam blok if paling dalam. Akibatnya, ia tidak ditentukan dalam skop global, yang membawa kepada ralat fungsi yang tidak ditentukan:

if ('foo' === 'bar') {
  function a() {
    abc = 'foo';
  }
}
a(); // Error: a is not defined

Untuk definisi fungsi bersyarat, adalah disyorkan untuk menggunakan ungkapan fungsi dan bukannya pengisytiharan:

var a = 'foo' === 'bar' ? function() {
  abc = 'foo';
} : function() {
  abc = 19;
};
a();
document.write(abc); // Expected output: 19

Atas ialah kandungan terperinci Bagaimanakah Perisytiharan Fungsi Berkelakuan Dalam Pernyataan if/else dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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