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
Perenggan pertama
Bersamaan dengan=>
Perenggan kedua
Bersamaan dengan=>
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:
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 pernyataanvar
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
Mungkin apa yang saya katakan itu samar-samar, LZ, mari kita lihat penjelasan orang laindan kemudian dikeluarkan. . Oleh itu, adalah pilihan yang baik untuk membuktikan bahawa JS adalah bahasa yang ditaip lemah = =var f
,但这里关键在于执行赋值f = 2
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.
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
f=2 (Ia milik tugasan, kedudukan kekal tidak berubah tetapi pengisytiharan berubah ditambah baik)
Kod kedua
Anda juga menggunakan kaedah di atas untuk memahami
dan ianya difahami oleh enjin js sebagai
Fungsi f ditimpa oleh pembolehubah f, jadi outputnya ialah 2
Seperti yang ycloud katakan, sebab di atas ialah "promosi definisi fungsi hanya dinaikkan ke skop blok if"
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?