Fungsi "JavaScript Advanced Programming" Bab 7, mengenai promosi pengisytiharan fungsi, terdapat contoh sedemikian:
if(condition){
function sayHi(){
alert("Hi!");
}
} else {
function sayHi(){
alert("Yo!");
}
}
Teks asal dalam buku itu berkata:
Di permukaan, kod di atas bermakna apabila keadaan adalah benar, gunakan satu definisi sayHi( jika tidak, gunakan definisi lain. Sebenarnya, ini adalah sintaks yang tidak sah dalam ECMAScript, dan enjin JavaScript akan cuba membetulkan ralat dan menukarnya kepada keadaan yang munasabah. Tetapi masalahnya ialah penyemak imbas tidak konsisten dalam percubaan mereka untuk membetulkan ralat. Kebanyakan pelayar akan mengembalikan pernyataan kedua, mengabaikan syarat, Firefox akan mengembalikan pernyataan pertama jika syarat adalah benar. Oleh itu penggunaan ini berbahaya dan tidak boleh digunakan dalam kod anda.
Tetapi saya mengujinya dalam chrome dan js bin dan menukar syarat kepada benar, dan ia boleh memberi amaran kepada "Hai". :
if(true){
function sayHi(){
alert("Hi!");
}
} else {
function sayHi(){
alert("Yo!");
}
}
sayHi();// Hi!
Sila beri nasihat, terima kasih!
true ialah literal, bukan pembolehubah Penyemak imbas akan terus mengoptimumkan pernyataan if anda semasa menghuraikan, sama seperti ini:
Namun, penulis merujuk kepada situasi lain
Selepas pengkompil mendapat kod ini, ia mendapati terdapat dua pengisytiharan fungsi pendua dalam skop yang sama. Pengisytiharan pertama akan digantikan secara langsung dengan pengisytiharan kedua.
js tidak mengesyorkan mengisytiharkan fungsi di dalam blok.
Dalam mod ketat, kod ini melaporkan ralat secara langsung.