2016-01-04 16 views
23

Es gibt einen Artikel Optimization killers im Wiki der Bluebird-Bibliothek. In diesem Artikel gibt es einen Satz:Was bedeutet Verbindung let/const?

Zeit nicht optimierbar:
...
Funktionen, die eine Verbindung lassen Zuordnung
Funktionen enthalten, die eine Verbindung konst Zuordnung enthalten

Was tut Zusammengesetzte Zuweisung und Verbindung const Zuweisung bedeuten? In ECMAScript 5.1 gab es den Begriff compound assignment, aber in ECMAScript 2015 scheint es keine Vorstellung von einer zusammengesetzten Zuweisung zu geben, es gibt nur regelmäßige Zuweisungen.

Ich vermute, dass Verbindung und const Zuweisung, es ist nur zusammengesetzte Zuweisung nach der Deklaration. Zum Beispiel:

let n = 1; 
n += 4; 

Bin ich richtig?

+0

Aus der Definition der Verbindung: "ein Ding, das aus zwei oder mehr separaten Elementen besteht; eine Mischung." Daraus würde ich denken, dass "let n = 1 + someval" eine zusammengesetzte Zuweisung ist und "let n = 1" nicht ist? Konnte aber nicht mit absoluter Sicherheit sagen ... – AdamJeffers

Antwort

15

Ja, das scheint genau zu sein, was es bedeutet. Ich hatte den folgenden Code (irrelevant zusätzliche Zeilen entfernt):

function updatePlayer(player) { 
    let direction = player.getDirection(); 
    if (player.isPressingLeft()) { 
     direction += angleChange; 
    } 
    if (player.isPressingRight()) { 
     direction -= angleChange; 
    } 
    player.setDirection(direction); 
} 

updatePlayer eine Warnung erzeugt, Nicht optimiert: Nicht unterstützte let Verbindung Zuordnung, in Chrome Profile Registerkarte so habe ich versucht, = ... + statt += und bekam eine signifikante, konsistente Leistungsverbesserung.

jsPerf shows that let compound assignments are indeed extremely slow in Chrome 49.0.2623, im Vergleich zu + ... = oder var! Ich denke, das wird in einer zukünftigen Version behoben werden, da weder Firefox noch IE11 noch Edge betroffen sind, und da Google anscheinend von dem Problem weiß.

+11

Das scheint richtig, aber was ist dann eine "zusammengesetzte" const "Zuweisung", da 'const' Deklarationen nicht neu zugewiesen werden können? –

+0

Spät zur Party, könnte aber auch bedeuten: let x = 1, y = x; 'statt' let x = 1; Lassen Sie y = x; '. Nur eine Vermutung. – Josh

+4

Warum zum Teufel macht das * noch * die Optimierung zunichte? Ich sehe dies in '--trace_opt --trace_deopt' die ganze Zeit. Zusammengesetzte Anweisungen wie "+ =" sind viel zu einfach und viel zu bequem. – TylerY86