In una funzione Javascript, è necessario definire funzioni annidate come espressioni di funzione o dichiarazioni di funzione consentite in un corpo di funzione? Ad esempio, qualcosa del genere sarebbe conforme?Funzioni nidificate Javascript
function a() {
function b() {
function c() {
window.alert(3);
}
window.alert(2);
}
window.alert(1);
}
Oppure dovresti fare qualcosa del genere?
function a() {
var a = function() {
var c = function() {
window.alert(3);
}
window.alert(2);
}
window.alert(1);
}
ECMA-262 dice che:
diverse implementazioni ampiamente usati di ECMAScript sono noti per sostenere l'uso di FunctionDeclaration come una dichiarazione. Tuttavia ci sono variazioni significative e inconciliabili tra le implementazioni nella semantica applicata a tali dichiarazioni di funzioni. A causa di queste differenze inconciliabili, l'uso di una FunctionDeclaration come Statement genera un codice che non è affidabile tra le implementazioni. Si raccomanda che le implementazioni ECMAScript non consentano l'uso di FunctionDeclaration o emettano un avviso quando si riscontra tale utilizzo. Le future edizioni di ECMAScript possono definire mezzi portatili alternativi per la dichiarazione di funzioni in un contesto di Statement.
Questo significa che una dichiarazione di funzione nel corpo di una funzione è tecnicamente errato, o che hanno ho ottenuto questo completamente sbagliato? Ho sentito persone riferirsi al corpo come un blocco, che secondo lo standard, è una o più affermazioni, ma non ne sono sicuro.
Non sono sicuro di quale sia lo standard, sembra un po 'confuso, ma onestamente non ho mai avuto problemi con le dichiarazioni delle funzioni di nidificazione in IE8 + e in tutti gli altri browser. – elclanrs