Vraag Wat is de uitgebreide modus?


Ik speel mee let in Knoop v0.10.12. De ... gebruiken --harmony markeer de volgende code levert een syntaxisfout op:

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

SyntaxError: Illegaal laat declaratie buiten uitgebreide modus

Als ik echter ook de --use-strict vlag, dan werkt de code zoals verwacht.

Waarom wordt er een syntaxisfout gegenereerd bij het gebruik van de --harmony vlag? Wat is de uitgebreide modus? Wat is de connectie met de strikte modus?


32
2018-06-22 17:38


oorsprong


antwoorden:


Het lijkt erop dat "uitgebreide modus" is verwijderd uit de huidige ontwikkelingsversie van de harmoniespecificatie op 27 februari 2012, maar er is een beschrijving van wat het zou moeten zijn in een paar oudere versies (deze is van 16 januari 2012):

10.1.2 Uitgebreide code

Uitgebreide code is elke code die is opgenomen in een syntactisch programma van het ECMAScript-programma   eenheid die voorvallen van lexicale of syntactische producties bevat   gedefinieerd na de vijfde editie van het ECMAScript   specificatie. Code wordt hieronder geïnterpreteerd als uitgebreide code   situaties:

  • Globale code is uitgebreide globale code als deze is opgenomen in een syntaxiseenheid van het ECMAScript-programma die is aangemerkt als een   uitgebreide programma-eenheid op een door de implementatie gedefinieerde manier of als ???.

  • Eval-code is uitgebreide eval-code als de aanroep naar eval een directe aanroep is (zie 15.1.2.1.1) naar de eval-functie die is opgenomen in   uitgebreide moduscode of als het begint met ???.

  • Functiecode die deel uitmaakt van een FunctionDeclaration, FunctionExpressionof accessor PropertyAssignment is uitgebreide functiecode als deze is FunctionDeclaration, FunctionExpressionof    PropertyAssignment bevindt zich in de code voor uitgebreide modus of als de functiecode met ??? begint.

  • Functiecode die wordt geleverd als het laatste argument voor de ingebouwde functieconstructor is een strikte functiecode als het laatste argument een is   Tekenreeks die wordt verwerkt als een FunctionBody begint met ???.

De term "strikte code" wordt gebruikt om zowel de werkelijke strikte modus aan te duiden   code en uitgebreide code terwijl de term "uitgebreide code" alleen wordt gebruikt   werkelijke uitgebreide code. De term "basiscode" wordt gebruikt om code aan te duiden   dat is geen uitgebreide code.

Wat de verbinding met de strikte modus betreft, lijkt dit specifiek te zijn voor de (experimentele) implementatie van V8. Dit is wat de wijzigingsoverzicht voor revisie 10062, die het --harmony vlag, zegt:

Deze CL introduceert een derde modus naast de niet-strikte (vanaf nu   genaamd 'classic mode') en 'strict mode' die 'extended' wordt genoemd   modus 'zoals in de huidige ES.next -specificaties. Het verlengde   modus is gebaseerd op de 'strenge modus' en voegt er nieuwe functionaliteit aan toe.   Dit betekent dat de meeste semantiek van deze twee modi samenvallen.

De 'uitgebreide modus' wordt ingevoerd in plaats van de 'strenge modus' tijdens   parsing bij gebruik van de 'strict mode'-richtlijn' gebruik strict 'en wanneer   de harmony-scoping vlag is actief.  Dit moet eenmaal worden gewijzigd   is volledig gespecificeerd hoe de 'uitgebreide modus' wordt ingevoerd.


15
2018-06-22 19:03



Hoe je harmonie kunt verkrijgen in je node.js

De --harmony vlag maakt ES Harmony-functies. het lijkt erop dat --harmony maakt nieuwe ECMA-functies in de taal mogelijk, gebaseerd op de v8, proxies, zwakke kaarten, sets, kaarten, type van semantiek en block scoping zijn beschikbaar wanneer deze vlag wordt gebruikt en dit zijn uitgebreide functies en na het uitbreiden van deze functies kunt u bijvoorbeeld let (voor block scoping) met strict mode alleen ingeschakeld omdat het daarop is gebaseerd, anders zal het gooien

SyntaxError: Illegaal laat declaratie buiten uitgebreide modus.

Uitgebreide modus: Wanneer u nieuw gebruikt ECMA functies (ECMAScript 5), bevindt u zich in de uitgebreide modus van de taal en in deze modus kunnen de nieuwe functies van ECMAScript (uitgebreide code) en syntaxis alleen worden gebruikt in strenge modus

Concept van "uitgebreide code", dat wil zeggen code die nieuwe Es.next kan gebruiken   syntaxis.

Harmonie :

"Harmony" is de naam van de grote upgrade naar JavaScript die tegen het einde van 2013 aankomt. In 2008, na veel controverse, stemde het ECMA Technical Committee 39, dat belast was met het maken van de volgende generatie JavaScript, overeen om samen te werken op een "Harmony" -update voor JavaScript en deze is sindsdien in ontwikkeling.    Een aantal van de voorgestelde functies van Harmony worden ondersteund door de implementatie van Google. Deze omvatten blok-scoped bindingen en de toevoeging van de laat trefwoorden, efficiënte kaarten en sets om de noodzaak te verwijderen van "misbruik van objecten als woordenboeken", zwakke kaarten voor garbage collectable sleutel / waardetabellen en proxies die een JavaScript-object of -functie kunnen simuleren om aanpassing mogelijk te maken.

Sommige goede leest hier en horen. Ook uit Chromium Blog.

Ook uit Paul Irish :

François Beaufort (oorspronkelijk gedeeld): een nieuwe vlag met de naam Inschakelen   Experimenteel JavaScript werd weergegeven op de pagina chrome: // flags van de   laatste Chromium-versie. Met deze vlag kunnen webpagina's experimenteel worden gebruikt   JavaScript-functies.

Om de uitgebreide modus / harmonie-functies nu te gebruiken Chrome we moeten dit inschakelen en we kunnen dit inschakelen door naar te navigeren chrome://flags en kan schakelen tussen (inschakelen / uitschakelen) van "Experimentele JavaScript-functies".


10
2018-06-22 18:28