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!