javascript - Saya melihat fungsi dalam bahagian pengisytiharan fungsi dan saya tidak begitu memahaminya.
我想大声告诉你
我想大声告诉你 2017-07-05 10:38:34
0
4
817

Ini adalah contoh ketinggian js di atas
Lihat bahawa pengisytiharan fungsi mempunyai kod

if(condition){
    function sayHi(){
        alert('hi')
    }
}else{
    function sayHi(){
        alert('Yo')
    }
}

Dikatakan bahawa kod ini mempunyai sintaks yang tidak sah Kebanyakan pelayar akan mengembalikan pernyataan kedua, dan Firefox akan mengembalikan pernyataan pertama.
Jika ia boleh ditukar kepada bentuk ungkapan fungsi, mengapa ini?

var sayHi;
if(condition){
    sayHi=function(){
        alert('Hi')
    }
}else{
    sayHi=function(){
        alert('Yo!')
    }
}
我想大声告诉你
我想大声告诉你

membalas semua(4)
黄舟

Kerana yang pertama ialah pengisytiharan fungsi, tetapi fungsi biasanya tidak diisytiharkan dalam if-else

Yang kedua adalah untuk menetapkan fungsi tanpa nama kepada pembolehubah Tidak ada perkara seperti promosi

黄舟

Fungsi penulisan xxx(){} secara langsung akan menghasilkan pengisytiharan awal Jika terdapat dua fungsi sedemikian dengan nama yang sama, ia bersamaan dengan melaksanakan var xxx dua kali di bahagian atas, jadi ia tidak sah

.
伊谢尔伦

Ia tiada kaitan dengan awalan pengisytiharan Pada masa itu, spesifikasi JavaScript masih ES5, penyemak imbas belum lagi melaksanakan skop peringkat blok (ES2016+), dan tahap skop hanyalah tahap fungsi. Jadi anda menulisnya

if(condition){
    function sayHi(){
        alert('hi')
    }
}else{
    function sayHi(){
        alert('Yo')
    }
}

dan ditulis oleh

function sayHi(){
  alert('hi')
}
function sayHi(){
  alert('Yo')
}

Tiada perbezaan penting

洪涛

js diisytiharkan terlebih dahulu! ! ! Fungsi akan disebut secara langsung di bahagian atas skop apabila ia diisytiharkan. Tiada skop dalam if, jadi kedua-dua fungsi adalah satu skop, dan yang kedua akan menggantikan yang pertama. ! Bagi kod kedua anda, anda mengisytiharkan pembolehubah sayhi dahulu, dan kemudian memberikan nilai kepada sayhi selepas penghakiman if,

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