ES6 dodał funkcje Fat-Arrow ( =>
), które mają dwie główne różnice w stosunku do normalnych funkcji:
- krótsza składnia (w tym niejawny zwrot, jeśli używasz treści pojedynczego wyrażenia)
- dziedzicz
this
z otaczającego zakresu
Obie są bardzo przydatnymi funkcjami, ale wydają mi się całkowicie odrębne pod względem wartości i zastosowania - czasami chcę jednej lub drugiej, albo obu, albo żadnej. Wydaje się dziwne, że jeśli chcę użyć funkcji krótki składni, ja mam również użyć this
zachowanie -modifying. I wzajemnie. Nie rozumiem, dlaczego te dwie możliwości zostały zaimplementowane jako pojedynczy dodatek do języka.
Co jeśli chcę użyć krótkiej funkcji składni do jej niejawnego zwrotu i zwięzłości (w pewnym kontekście, w którym pełny function (..) { return ...}
byłby nieco mniej czytelny), ale chcę użyć this
w mojej funkcji, aby odwoływać się do kontekstu wywołującego? Nie ma na to sposobu.
Coffeescript ma zarówno ->
i =>
styl funkcje i najwyraźniej ES6 zapożyczył =>
styl stamtąd. Więc moje pytanie brzmi: dlaczego ES6 również nie pożyczył tego ->
stylu?
źródło
arguments
.this
zamknięcie w deklaracji pełnej funkcji. Jednak może to nie dotyczy Ciebie.Odpowiedzi:
Zobacz propozycję dodania funkcji strzałek: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax 1
Mówi to:
Możesz również zobaczyć dyskusję na temat poprzedniej wersji wniosku, która również miała składnię ->: https://esdiscuss.org/topic/arrow-function-syntax-simplified
Wydaje się sprowadzać do następujących kwestii:
->
było uważane za rzadko przydatne, a foot-gun.źródło
function()
styl tego wiązania był błędem i jest brodawką dla języka. Gdyby mogli, zmieniliby sięfunction()
na=>
semantykę, ale nie mogą, ponieważ spowodowałoby to naruszenie kompatybilności wstecznej.function()
dziedziczeniethis
z zakresu otaczającego tak jak=>
robi? W takim razie czy niethis
odnosiłby się wszędzie do globalnego obiektu? Brzmi dziwnie. Gdzie to słyszałeś?