12
votes

Comment définir une nouvelle fonction globale dans JavaScript

J'ai un problème qui tente de faire une fonction globale lorsqu'il est impliqué dans la fermeture. Dans le code énuméidé ci-dessous, j'ai une méthode anonyme qui définit à la nouvelle fonction de la fenêtre appelée, getnamefield . XXX

Ceci fonctionne bien Dans le navigateur, mais quand j'exécute le code dans jslint.com avec "interdire les variables non définies" activées, cela me donne une erreur .

problème à la ligne 17 caractère 7: ' getNamefield ' n'est pas défini.

Pouvez-vous m'aider à résoudre ce problème pour que Jslint comprenne réellement que cette fonction devrait être considérée comme globale?


2 commentaires

"Cela fonctionne bien dans le navigateur" alors quel est le problème?


Je voulais juste m'assurer que j'écris le code par la spécification JavaScript et n'utilise pas une sorte de "hack".


3 Réponses :


10
votes

J'essaierais

window["getNameField"] = function(fieldId) {


1 commentaires

Cela fera précisément aucune différence.



2
votes

Jslint prend des commentaires annotant à cette fin. Lire ici sur l'utilisation d'un / * global * / Commentaire.


2 commentaires

Généralement, dans le code JS, je souhaite éviter d'utiliser des commentaires en raison des caractères supplémentaires téléchargés sur le navigateur. Je pourrais continuellement ajouter et supprimer les commentaires mais je n'aime pas non plus cette étape manuelle.


Oui, le fichier est plus petit si vous supprimez tous les commentaires. Il est également plus petit si vous l'exécutez via un minimum JavaScript, qui le fait et raccourcit tous les noms de variables et supprime tous les espaces inutiles. Dans les deux cas, vous ne voulez pas développer à l'aide de la version «Minifiée». Soit la différence de taille insignifiante des commentaires de la source ou effectuez une copie minifiée lorsque vous "déployez".



20
votes

Vous pouvez plutôt l'appeler comme window.getnamefield : xxx

ou vous pouvez définir une variable en dehors de la fermeture: xxx < / pré>


2 commentaires

Sur les mêmes lignes, je pourrais créer une variable qui agit comme un "espace de noms", où la variable est une matrice associative et la fonction est attribuée à l'une des entrées de la matrice associative. L'inconvénient, bien que mineur, est que je devrais redéfinir tout mon code pour utiliser la variable "Espace de noms" si je voulais rester cohérent.


En effet, vous pourriez. Il n'y a pas de problème grave avec votre code tel qu'il se trouve.