2013-12-12 8 views
5

Vor kurzem las ich die ECMAScript Language Specification. Ich hatte nicht vor, die ganze Spezifikation zu lesen, ich habe nur ein paar Teile aufgenommen. Ich kam viele Fragen kreuzen, einer von ihnen ist wie folgt:ECMA-262 ReturnIfAbrupt

ToLength

1.Let len be ToInteger(argument). 
2.ReturnIfAbrupt(len). 
3.If len ≤ +0, then return +0. 
4.Return min(len, 2^53-1). 

Wie ich verstehe, sollte es so aussehen:

var len = ToInteger(argument); // step 1 
len = ReturnIfAbrupt(len);// step 2 
// step 3 
if(len<=0){ 
    return +0; //-0 is OK too? 
} 
return Math.min(len, Math.pow(2,53)-1); // step 4 

Ich verstand nicht, was die Bedeutung dies von ReturnIfAbrupt (len) ist, und ich fand:

ReturnIfAbrupt

1.If Argument ist ein abrupt completion, dann Argument zurück.

2.Else wenn Argument ein Completion Record ist, dann lassen Sie Argument Argument sein. [[Wert]].

Was ist abrupte Vervollständigung, und die Unterschiede zwischen ihm und Vervollständigungsaufzeichnung? Können sie einen Schritt kombinieren: Wenn Argument ein Completion Record ist, dann Rückkehr Argument. Jeder Vorschlag wird dankbar sein!

+0

Sie könnten mit dem Lesen der ES 5.1-Spezifikation beginnen, die nicht mehr in der Entwicklung ist. – Bergi

+0

Mögliches Duplikat von [Was bedeutet ReturnIfAbrupt im ES6-Entwurf?] (Http://stackoverflow.com/questions/12995554/what-does-returnifabrupt-mean-in-es6-draft) –

Antwort

1

Mein Verständnis ist, dass in ES 6, wenn ein Ausdruck ausgewertet wird, gibt sie eine Fertigstellungsaufzeichnung (die eine Spezifikationseinrichtung zum Erläutern Verhalten), die Informationen über das Ergebnis der Auswertung des Ausdrucks hält.

Wenn im obigen Fall das Argument ein abrupter Abschlussdatensatz ist (d. H. Sein Typ ist etwas anderes als normal), wird es zurückgegeben.

Wenn das Argument keine abrupte Fertigstellungsaufzeichnung, wird sein Wert zurückzugeführt.

, die im Wesentlichen bedeutet, dass, wenn die Umwandlung des Arguments auf eine ganze Zahl OK geht, den Wert zurück. Andernfalls wird ein Fehlerwert propagiert.

1

der ECMAScript Spec Laut.

Der Begriff "abrupte Beendigung" bezieht sich auf jede Vervollständigung mit einem anderen [[type]] Wert als normal.

Ein Abschlussdatensatz ist ein "Objekt" mit drei Datenelementen: Typ, Wert und Ziel.

Und http://people.mozilla.org/~jorendorff/es6-draft.html#sec-normalcompletion ist ein Beispiel für Completion Record.

Dennoch ist es nicht klar, enoughXD, vielleicht brauchen Sie weiter auf der Lese lesen.