2016-01-04 14 views
23

Istnieje artykuł Optimization killers w wiki biblioteki Bluebird. W tym artykule znajduje się fraza:Co oznacza przypisanie mieszane let/const?

Obecnie nie podlegających optymalizacji:
...
Funkcje, które zawierają związek niech przypisania
Funkcje, które zawierają związek zadanie const

Co robi przypisanie mieszane i oznaczenie składu mieszanki? W ECMAScript 5.1 pojawiło się pojęcie compound assignment, ale w ECMAScript 2015 wydaje się, że nie ma pojęcia o złożonym przypisaniu, że istnieją tylko regularne przypisania.

Podejrzewam, że przypisanie let i const jest złożone, to po prostu złożone przypisanie po deklaracji. Na przykład:

let n = 1; 
n += 4; 

Mam rację?

+0

Z definicji związku: "rzecz, która składa się z dwóch lub więcej oddzielnych elementów, mieszaniny". Na tej podstawie sądzę, że 'let n = 1 + someval' jest przypisaniem złożonym, a' let n = 1' nie jest? Nie można powiedzieć z całkowitą pewnością siebie ... – AdamJeffers

Odpowiedz

15

Tak, wydaje się, że dokładnie to oznacza. Miałem następujący kod (nieistotne Dodatkowe linie usunięte):

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

updatePlayer wygenerowane ostrzeżenie, Nie zoptymalizowany: Nieuzasadnione let zadanie związek w Chrome Profiles tab, więc próbowałem = ... + zamiast += i dostał znacząca, stała poprawa wydajności.

jsPerf shows that let compound assignments are indeed extremely slow in Chrome 49.0.2623, w porównaniu do + ... = lub var! Sądzę, że zostanie to naprawione w przyszłej wersji, ponieważ ani Firefox, ani IE11, ani Edge nie zostaną naruszone, a Google najwyraźniej wie o tym problemie.

+11

To wydaje się właściwe, ale co to jest "złożone" przypisanie stałej ", skoro deklaracje" const "nie mogą być ponownie przypisane? –

+0

Spóźniony na imprezę, ale może również oznaczać "let x = 1, y = x;" zamiast 'let x = 1; niech y = x; '. Tylko zgadnij. – Josh

+4

Dlaczego do cholery robi to * nadal * zabija optymalizację? Widzę to w '--trace_opt - trace_deopt' przez cały czas. Instrukcje przypisania składni, takie jak "+ =", są zbyt proste i zbyt wygodne. – TylerY86