javascript - Saya ingin bertanya kepada anda tentang promosi fungsi dalam JS?
代言
代言 2017-06-12 09:30:06
0
3
645

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.

代言
代言

membalas semua(3)
代言

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.

function a() {
    console.log('1')
}    

(function() {
    var a;
    console.log(a);
    if(1) {
        a = function a() {
            console.log('2');
        }
    }
})()
学习ing

Dalam IIFE anda

 if(1) {
  a = function a() {
    console.log('2')
  }
} 

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 ..

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan