Pour implémenter un minuscule compilateur qui émet ECMAScript, j'ai besoin de savoir à quel point une expression d'objet fonction est forte, c'est-à-dire quelle est la priorité de l'opérateur function(a1, a2, ...) { ... }
? Par exemple, comment function(a1, a2, ...) { ... } (b1, b2, ...)
est-il supposé être analysé? Pour obtenir le résultat souhaité, à savoir l'application de b1, b2, ... à l'objet fonction, je dois utiliser des parenthèses autour de l'objet fonction dans l'interpréteur Rhino.Préséance de l'expression de l'objet fonction dans ECMAScript
Répondre
Votre function(a1, a2, ...) { ... } (b1, b2, ...)
n'est pas valide et doit renvoyer une erreur de syntaxe. ECMAScript a le concept d'un FunctionDeclaration
ainsi que celui d'un FunctionExpression
. Vous pouvez consulter les éléments suivants:
- Function expressions vs. Function declarations
- Explain JavaScript's encapsulated anonymous function syntax (@CMS' answer)
Alors qu'un FunctionExpression
est un opérateur, la FunctionDeclaration
est une syntaxe particulière utilisée pour déclarer les fonctions, qui sont automatiquement hissé au sommet de la portée englobante.
Envelopper un function
dans le grouping operator (parenthèse) forcera l'interpréteur à le traiter comme FunctionExpression
.
Si vous essayez ce qui suit dans Firebug:
function() { alert('test'); }(); // Syntax Error
(function() { alert('test'); })(); // Works fine
Pour exécuter une fonction littérale, il doit être mis entre parenthèses. Soit:
(function(...){...})(...);
ou:
(function(...){...}(...));
Sans les parenthèses, il produit une erreur de syntaxe.
Il suffit de faire une valeur r. Ainsi, '! Funcion() {...}' fonctionne aussi. – Pointy
- 1. sémantique VariableStatement dans ECMAScript
- 2. Quelle est la portée d'une fonction dans Javascript/ECMAScript?
- 3. Préséance des événements javascript
- 4. C++ Ordre de préséance des opérateurs binaires
- 5. confondu avec ECMAScript Language Specification Fonction section Appels
- 6. MySQL INSERT et SELECT Ordre de préséance
- 7. Erreurs de frappe possibles dans la spécification ECMAScript 5?
- 8. Ecmascript en XHTML ou SVG
- 9. Implémentation du navigateur EcmaScript 5
- 10. Préséance des paramètres avec des dispositions imbriquées
- 11. Calcul des délais en Javascript/ECMAScript
- 12. Obtenir l'utilisateur actuel SharePoint2010 client OM/ECMAScript
- 13. Existe-t-il un meilleur moteur C# ECMAScript que ScriptControlClass?
- 14. Préséance des paramètres tels que viewstate à différents niveaux
- 15. Donner préséance/poids à une colonne en utilisant FREETEXTTABLE
- 16. traduire ECMAScript (Java, javascript, Actionscript) connaissances à l'objectif C
- 17. Comment l'Ecma-262 (EcmaScript 5) va-t-elle vous aider?
- 18. Quels scripts modernizer existent pour les nouvelles fonctions ECMAScript 5?
- 19. Veuillez expliquer un conflit apparent entre la préséance de && et || et le résultat réel d'une expression
- 20. J'ai besoin d'aide pour traduire cette partie de la grammaire ECMAScript?
- 21. Comment puis-je définir un getter et un setter par défaut en utilisant ECMAScript 5?
- 22. Est-ce un bug dans Ecmascript - /S/.test (null) renvoie vrai?
- 23. Quels environnements (javascript) prennent en charge le mode strict ECMAscript 5? (aka "use strict")
- 24. fonction de membre de classe dans la fonction?
- 25. Impossible d'utiliser l'appel de fonction dans la garde de fonction
- 26. fonction de puissance dans blackberry
- 27. Pointeur de fonction dans C
- 28. Fonction de plafond dans Access
- 29. Fonction de puissance dans prolog
- 30. fonction de dépliage dans R?
Merci beaucoup! Votre réponse était exactement ce que je cherchais. (En fait, il me semble que cette fonctionnalité particulière d'ECMAScript n'a pas été bien pensée.) – Marc
@ Marc: Oui, je suis d'accord. Les expressions de fonction auraient dû être suffisantes. Il y a beaucoup de situations où les déclarations de fonction sont confuses dans cette langue ... Ce sujet a été discuté récemment dans un autre message de Stack Overflow: http://stackoverflow.com/questions/3798984/whats-going-on-in-javascript-when- i-use-the-traditionnel-c-style-function-decla –