Rumah > Soal Jawab > teks badan
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
黄舟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...
某草草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.
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
黄舟2017-06-12 09:30:15
Mengikut piawaian ECMA, pengisytiharan fungsi dipromosikan terlebih dahulu;
为情所困2017-06-12 09:30:15
Sekeping kod pertama ialah promosi berubah-ubah, var f=undefined, dan pembolehubah f menunjukkan fungsi;
漂亮男人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
黄舟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?