Considérese el siguiente script:¿Cómo puedo definir condicionalmente una función en javascript?
if (false) {
function foo() {
alert("FOO");
}
}
foo(); // alerts "FOO"
Como se puede ver, la función foo
se define y funciona a pesar de que la condición para la if
falla.
La razón por la que quiero hacer esto es porque estoy desarrollando una extensión para InDesign y realicé un script llamado utilities.jsx que contiene varias funciones que se utilizan en otros scripts. En todos los scripts que necesitan estas funciones, simplemente uso:
app.doScript(File(scriptsFile.parent.fsName + "/t_utilities.jsx"), ScriptLanguage.JAVASCRIPT);
que define todas las funciones que necesito y luego puedo usarlas. Ahora, dado que este script será llamado varias veces por varios archivos en un orden impredecible (el usuario decide), pensé que solo podría definir las funciones si no se han definido antes (si utilities.jsx aún no se ha ejecutado) . Algo así como require_once
en php.
Estaba pensando en algo así como lo siguiente, pero que no funciona como las funciones se definen cada vez que se ejecuta el script: `
var utilitiesHasRun;
if (utilitiesHasRun !== true) {
// define all the functions
// ...
utilitiesHasRun = true;
}
¿Hay alguna otra opción?
Su primer fragmento de código no es técnicamente válido porque las declaraciones de funciones no están permitidas dentro de los bloques. Solo funciona porque todos los principales navegadores implementan extensiones a la especificación de ECMAScript para tratar este caso. –
Y para continuar @ el comentario de TimDown, su primer fragmento lanzará realmente un SyntaxError si es parte del código de modo estricto. –