Si consideri il seguente script:Come posso definire condizionatamente una funzione in javascript?
if (false) {
function foo() {
alert("FOO");
}
}
foo(); // alerts "FOO"
Come si può vedere, la funzione foo
è definita e funziona anche se la condizione per la if
fallisce.
Il motivo per cui voglio farlo è che sto sviluppando un'estensione per InDesign e ho creato uno script chiamato utilities.jsx che contiene varie funzioni utilizzate in altri script. In tutti gli script che richiedono queste funzioni, uso semplicemente:
app.doScript(File(scriptsFile.parent.fsName + "/t_utilities.jsx"), ScriptLanguage.JAVASCRIPT);
che definisce tutte le funzioni di cui ho bisogno e quindi posso usarle. Ora, poiché questo script verrà chiamato più volte da vari file in un ordine imprevedibile (l'utente decide), ho pensato che potrei definire le funzioni solo se non sono state definite prima (se utilities.jsx non è ancora stato eseguito) . Un po 'come require_once
in php.
Stavo pensando a qualcosa di simile a quanto segue, ma che non funziona come le funzioni sono definite ogni volta che lo script viene eseguito: `
var utilitiesHasRun;
if (utilitiesHasRun !== true) {
// define all the functions
// ...
utilitiesHasRun = true;
}
ci sono altre opzioni?
Il primo snippet di codice non è tecnicamente valido perché le dichiarazioni di funzione non sono consentite all'interno dei blocchi. Funziona solo perché tutti i principali browser implementano estensioni alle specifiche ECMAScript per gestire questo caso. –
E per continuare il commento di @ TimDown, il tuo primo snippet genererà effettivamente un SyntaxError se fa parte del codice di modalità rigoroso. –