В ES6 добавлены функции жирной стрелки ( =>
), которые имеют два основных отличия от обычных функций:
- более короткий синтаксис (включая неявный возврат, если вы используете тело с одним выражением)
- наследовать
this
от окружающей области
Обе эти функции очень полезны, но мне кажутся совершенно разными по своей ценности и применению - иногда я хочу одну или другую, или обе, или ни одну. Кажется странным, что если я хочу использовать функцию с коротким синтаксисом, я должен также использовать this
поведение -modifying. И наоборот. Я не понимаю, почему эти две возможности реализованы как одно дополнение к языку.
Что если я хочу использовать функцию короткого синтаксиса для ее неявного возврата и краткости (в некотором контексте, где заполнение function (..) { return ...}
будет немного менее читабельным), но я хочу использовать this
в своей функции ссылку на контекст вызова? Там нет никакого способа сделать это.
У CoffeeScript есть ->
и =>
функции стиля, и, очевидно, ES6 заимствовал =>
стиль оттуда. Итак, мой вопрос: почему ES6 также не позаимствовал ->
стиль?
источник
arguments
.this
к замыканию в полном объявлении функции. Возможно, это не та часть, которая вас беспокоит.Ответы:
Смотрите предложение по добавлению функций стрелок: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax 1
Что это говорит:
Вы также можете увидеть некоторые обсуждения предыдущей версии предложения, которая также имела синтаксис ->: https://esdiscuss.org/topic/arrow-function-syntax-simplified
Похоже, сводится к следующему:
->
редко считалось полезным, а также ножной пушкой.источник
function()
стиль этого связывания был ошибкой и бородавкой в языке. Если бы они могли, они бы изменить ,function()
чтобы иметь=>
семантику, но они не могут , потому что нарушили бы обратную совместимость.function()
к наследованиюthis
от окружающего пространства, как это=>
делает? В таком случае, не будет лиthis
ссылаться на глобальный объект везде? Звучит странно. Откуда вы узнали это?