Kod berikut:
function a() {
console.log('1')
}
(function() {
console.log(a);
if(1) {
function a() {
console.log('2');
}
}
})()
Selepas berjalan, output tidak ditentukan.
Selepas mengalih keluar keadaan if, output adalah fungsi kedua
function a() {
console.log('1')
}
(function() {
console.log(a);
// if(1) {
function a() {
console.log(2);
}
// }
})()
Mengetahui bahawa fungsi itu dipertingkatkan, dalam sekeping kod kedua, fungsi kedua akan dinaikkan pangkat sebelum kod console.log(a), jadi fungsi kedua dijalankan dan dikeluarkan.
Tetapi dalam sekeping kod pertama, saya tidak faham mengapa undefined dikeluarkan.
Pengisytiharan fungsi bersyarat diproses dengan cara yang sama seperti ungkapan fungsi. Oleh itu, pengisytiharan fungsi bersyarat kehilangan sifat angkat pengisytiharan fungsi.
URL Rujukan: /q/10...
Apabila menggunakan kata kunci fungsi dalam pernyataan if else untuk mengisytiharkan fungsi, promosi pembolehubah adalah berbeza dalam pelayar yang berbeza. Cuma pengisytiharan pembolehubah dipromosikan di sini, dan jika lain dialih keluar, ia menjadi skop fungsi tulen.
Dalam IIFE anda
ialah ungkapan fungsi, bukan pengisytiharan fungsi Apabila if dialih keluar, ia adalah pengisytiharan fungsi Jika tidak dialih keluar, conosle.log(a), a mewakili pembolehubah tidak ditentukan a, rujuk https://developer. mozilla.org ..