cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Saya melihat fungsi dalam bahagian pengisytiharan fungsi dan saya tidak begitu memahaminya.

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!')
    }
}
我想大声告诉你我想大声告诉你2701 hari yang lalu785

membalas semua(4)saya akan balas

  • 黄舟

    黄舟2017-07-05 10:40:34

    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

    balas
    0
  • 黄舟

    黄舟2017-07-05 10:40:34

    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

    .

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-07-05 10:40:34

    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

    balas
    0
  • PHP中文网

    PHP中文网2017-07-05 10:40:34

    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,

    balas
    0
  • Batalbalas