32 votes

Qu'est-ce que le mode étendu ?

Je joue avec let dans Node v0.10.12. En utilisant le --harmony le code suivant produit une erreur de syntaxe :

for (let i = 0; i < 2; i += 1) {
    console.log('i', i);
}

Erreur de syntaxe : Déclaration de let illégale en dehors du mode étendu

Cependant, si j'utilise également le --use-strict le code s'exécute comme prévu.

Pourquoi une erreur de syntaxe apparaît-elle lorsque l'on utilise simplement l'option --harmony drapeau ? Qu'est-ce que le mode étendu ? Quel est le lien avec le mode strict ?

15voto

Blender Points 114729

Il semblerait que le "mode étendu" ait été supprimé de la liste de contrôle de l'UE. version de développement actuelle de la spécification de l'harmonie le 27 février 2012, mais il y a une description de ce qu'elle était censée être dans quelques autres plus anciennes (celle-ci date du 16 janvier 2012) :

10.1.2 Code étendu

Le code étendu est tout code contenu dans une unité syntaxique du programme ECMAScript qui contient des occurrences de productions lexicales ou syntaxiques définies postérieurement à la cinquième édition de la spécification ECMAScript . Le code est interprété comme du code étendu dans les situations suivantes situations suivantes :

  • Le code global est un code global étendu s'il est contenu dans une unité syntaxique de programme ECMAScript qui a été désignée comme une unité de programme étendue dans le document intitulé unité de programme étendue d'une manière définie par l'implémentation ou si ? ??.

  • Le code eval est du code eval étendu si l'appel à eval est un appel direct (voir 15.1.2.1.1) à la fonction eval qui est contenue dans le code en mode étendu ou s'il commence par ? code en mode étendu ou s'il commence par ? ??.

  • Code de fonction qui fait partie d'un Déclaration de fonction , Expression de fonction ou l'accesseur Affectation des propriétés est un code de fonction étendu si son Déclaration de fonction , Expression de fonction ou Affectation des propriétés est contenu dans le code du mode étendu ou si le code de la fonction commence par ? ??.

  • Le code de fonction qui est fourni comme dernier argument au constructeur intégré Function est un code de fonction strict si le dernier argument est une chaîne de caractères (String). String qui, lorsqu'il est traité comme un FonctionCorps commence par ? ??.

L'expression "code strict" est utilisée pour désigner à la fois le mode strict effectif et le code étendu, tandis que le terme "code étendu" désigne uniquement le code le code étendu réel. Le terme "code de base" est utilisé pour désigner le code qui n'est pas du code étendu.

Quant à la connexion en mode strict, elle semble être spécifique à l'implémentation (expérimentale) de V8. Voici ce que le journal des modifications de la révision 10062 qui a introduit le --harmony drapeau, dit :

Ce CL introduit un troisième mode à côté du mode non-strict (dorénavant appelé "mode classique") et "mode strict", appelé "mode étendu", comme dans l'actuel projet de spécification ES.next. comme dans les projets de spécifications actuels de l'ES.next. Le mode étendu est basé sur le "mode strict" et lui ajoute de nouvelles fonctionnalités. Cela signifie que la plupart des sémantiques de ces deux modes coïncident.

Le "mode étendu" est utilisé à la place du "mode strict" lors de l'exécution de l'opération. l'analyse syntaxique lors de l'utilisation de la directive "mode strict" "use strict" et lorsque l'indicateur d'harmonie est actif. Cela devrait être modifié une fois qu'il une fois que la manière d'accéder au "mode étendu" aura été pleinement précisée.

10voto

WereWolf - The Alpha Points 49671

Comment obtenir l'harmonie dans votre node.js

En --harmony permet Caractéristiques de l'ES Harmony . il semble que --harmony permet d'intégrer de nouvelles fonctionnalités ECMA dans le langage, en se basant sur les v8 les proxies, les cartes faibles, les ensembles, les cartes, la sémantique typeof et la délimitation des blocs sont disponibles lorsque ce drapeau est utilisé. Il s'agit de fonctionnalités étendues et, après avoir étendu ces fonctionnalités, vous pouvez utiliser, par exemple, les éléments suivants let (pour la délimitation des blocs) avec strict mode activé seulement parce qu'il est basé sur lui, sinon il lancera

Erreur de syntaxe : Déclaration de let illégale en dehors du mode étendu.

Mode étendu : Lorsque vous utilisez de nouvelles ECMA (ECMAScript 5), vous vous trouvez dans le mode étendu du langage et, dans ce mode, les nouvelles fonctionnalités (code étendu) et la syntaxe d'ECMAScript ne peuvent être utilisées que dans les applications suivantes mode strict

Concept de "code étendu" qui signifie un code qui peut utiliser la nouvelle syntaxe Es.next syntaxe.

Harmony :

"Harmony" est le nom de la mise à jour majeure de JavaScript qui devrait arriver d'ici la fin 2013. En 2008, après de nombreuses controverses, le comité technique 39 de l'ECMA, qui avait été chargé de créer la prochaine génération de JavaScript, a accepté de travailler ensemble sur une mise à jour "Harmony" de JavaScript, qui est en cours de développement depuis lors. Un certain nombre des caractéristiques proposées de Harmony sont pris en charge par l'implémentation de Google. Il s'agit notamment des liaisons à portée de bloc et de l'ajout de l'élément let des cartes et des ensembles efficaces pour ne pas avoir à "abuser des objets en tant que dictionnaires", des cartes faibles pour les tables clés/valeurs récupérables à la poubelle et des mandataires qui peuvent simuler n'importe quel objet ou fonction JavaScript pour permettre la personnalisation.

Quelques bonnes lectures aquí y entendre . Aussi de Blog sur le chrome .

Également de Paul Irish :

François Beaufort (partagé à l'origine) : Un nouveau drapeau nommé Enable JavaScript expérimental est apparu dans la page chrome://flags de la dernière version de Chromium. Ce drapeau permet aux pages web d'utiliser les fonctionnalités expérimentales JavaScript expérimentales.

Pour utiliser les fonctions étendues du mode/de l'harmonie qui sont maintenant disponibles. Chrome nous devons l'activer et nous pouvons le faire en naviguant vers chrome://flags et peut activer/désactiver l'option "Fonctions JavaScript expérimentales".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X