Rumah > Soal Jawab > teks badan
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!')
}
}
黄舟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
黄舟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
.伊谢尔伦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
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,