javascript - Pengisytiharan fungsi dan keutamaan pengisytiharan berubah-ubah
学习ing
学习ing 2017-06-12 09:28:15
0
7
812
  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
学习ing

membalas semua(7)
黄舟

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

某草草

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.

洪涛

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

黄舟

Mengikut piawaian ECMA, pengisytiharan fungsi dipromosikan terlebih dahulu;

为情所困

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

漂亮男人

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

黄舟
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?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!