cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Pengisytiharan fungsi dan keutamaan pengisytiharan berubah-ubah

  console.log(f);//function f(){return 1}
    function f(){
        return 1
    }
    var f=2;

Saya sebelum ini berpendapat bahawa jika fungsi dan pembolehubah mempunyai nama yang sama, promosi perisytiharan fungsi akan mengatasi promosi perisytiharan pembolehubah, dan kemudian saya menguji kod berikut

  function f(){
   return 1
}
var f=2;
    console.log(f);//2

Keluaran console.log(f) akan berbeza bergantung pada kedudukan Siapa yang menimpa siapa, atau ada sebab lain?
Sila minta tuan menjelaskan

学习ing学习ing2764 hari yang lalu898

membalas semua(7)saya akan balas

  • 黄舟

    黄舟2017-06-12 09:30:15

    Perenggan pertama

     console.log(f);//function f(){return 1}
        function f(){
            return 1
        }
        var f=2;

    Bersamaan dengan=>

    var f;
    function f() {
      return 1
    }
    console.log(f); //function f(){return 1}
    f = 2;




    Perenggan kedua

      function f(){
       return 1
    }
    var f=2;
        console.log(f);//2

    Bersamaan dengan=>

    var f;
    function f() {
      return 1
    }
    f = 2;
    console.log(f); //2

    Lihat
    https://www.zhihu.com/questio...

    balas
    0
  • 某草草

    某草草2017-06-12 09:30:15

    Apabila mentakrifkan fungsi bukan dalam blok, angkat fungsi itu dahulu dan kemudian deklarasi pembolehubah Rujuk ECMAScript 5, bahagian 10.5.

    Contohnya adalah seperti berikut:

    function f(){}
    var f;
    console.log(f);
    
    var g;
    function g(){}
    console.log(g);
    

    Output di atas adalah fungsi. Ia bukan undefined Jadi mula-mula promosikan fungsi, dan kemudian promosikan pengisytiharan berubah-ubah.

    balas
    0
  • PHP中文网

    PHP中文网2017-06-12 09:30:15

    JS jurubahasa akan terlebih dahulu mempromosikan pernyataan var Ambil perhatian bahawa mempromosikan pernyataan pengisytiharan var dan bukannya pernyataan tugasan.
    Kemudian, pengisytiharan fungsi akan dinaikkan pangkat. Oleh itu, situasi yang dinyatakan di atas akan terbentuk

    Untuk kes kedua, saya rasa ia tiada kaitan dengan angkat. Walaupun ia juga diperbaiki dan kemudian dikeluarkan. . Oleh itu, adalah pilihan yang baik untuk membuktikan bahawa JS adalah bahasa yang ditaip lemah = =var f,但这里关键在于执行赋值 f = 2

    Mungkin apa yang saya katakan itu samar-samar, LZ, mari kita lihat penjelasan orang lain

    balas
    0
  • 黄舟

    黄舟2017-06-12 09:30:15

    Mengikut piawaian ECMA, pengisytiharan fungsi dipromosikan terlebih dahulu;

    balas
    0
  • 为情所困

    为情所困2017-06-12 09:30:15

    Sekeping kod pertama ialah promosi berubah-ubah, var f=undefined, dan pembolehubah f menunjukkan fungsi;

    balas
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:30:15

    Apabila js dilaksanakan, ia akan dilaksanakan dari atas ke bawah.

    console.log(f);//function f(){return 1}
        function f(){
            return 1
        }
        var f=2;

    Dalam kod ini, fungsi pengisytiharan fungsi f dan perisytiharan pembolehubah var f dinaikkan pangkat bersama-sama, tetapi keutamaan pengisytiharan fungsi akan lebih tinggi,
    jadi kod itu menjadi

    var f;
    function f() {
      return 1
    }
    console.log(f); 
    f = 2;

    f=2 (Ia milik tugasan, kedudukan kekal tidak berubah tetapi pengisytiharan berubah ditambah baik)

    Kod kedua

    function f(){
       return 1
    }
    var f=2;
        console.log(f);//2

    Anda juga menggunakan kaedah di atas untuk memahami
    dan ianya difahami oleh enjin js sebagai

    function f(){
       return 1
    }
    var f;
    f=2;
    console.log(f);//2

    Fungsi f ditimpa oleh pembolehubah f, jadi outputnya ialah 2

    balas
    0
  • 黄舟

    黄舟2017-06-12 09:30:15

    console.log(e());//error
    
    if(true){
        function e() {
            return 10;
        }
    }
    

    Seperti yang ycloud katakan, sebab di atas ialah "promosi definisi fungsi hanya dinaikkan ke skop blok if"

    if(true){
    
        function e() {
            return 10;
        }
    }
    console.log(e());//10
    

    Jika promosi definisi fungsi hanya dinaikkan kepada skop blok if, maka apakah sebab perkara di atas? (Ujian Chrome58) Mengapakah fungsi dalam skop blok if boleh diakses dari luar?

    balas
    0
  • Batalbalas