Я знаю, что >=
оператор означает больше или равно, но я видел =>
в некотором исходном коде. В чем смысл этого оператора?
Вот код:
promiseTargetFile(fpParams, aSkipPrompt, relatedURI).then(aDialogAccepted => {
if (!aDialogAccepted)
return;
saveAsType = fpParams.saveAsType;
file = fpParams.file;
continueSave();
}).then(null, Components.utils.reportError);
javascript
syntax
ecmascript-6
arrow-functions
rpgs_player
источник
источник
Ответы:
Что это
Это функция стрелки. Функции со стрелками - это короткий синтаксис, введенный в ECMAscript 6, который можно использовать аналогично тому, как вы использовали бы выражения функций. Другими словами, вы часто можете использовать их вместо таких выражений, как
function (foo) {...}
. Но у них есть некоторые важные различия. Например, они не связывают свои собственные значенияthis
(см. Обсуждение ниже).Функции стрелок являются частью спецификации ECMAscript 6. Они еще не поддерживаются во всех браузерах, но частично или полностью поддерживаются в Node v. 4.0+ и в большинстве современных браузеров, используемых по состоянию на 2018. (Ниже приведен частичный список поддерживаемых браузеров).
Вы можете прочитать больше в документации по функциям стрелок в Mozilla .
Из документации Mozilla:
Замечание о том, как
this
работает функция ArrowОдна из наиболее удобных функций функции со стрелкой скрыта в тексте выше:
Проще говоря, это означает, что функция стрелки сохраняет
this
значение из своего контекста и не имеет своего собственногоthis
. Традиционная функция может связывать свое собственноеthis
значение, в зависимости от того, как оно определено и вызвано. Это может потребовать много гимнастики, какself = this;
, например , и т. Д., Чтобы получить доступ или управлятьthis
из одной функции внутри другой функции. Для получения дополнительной информации по этой теме см. Объяснение и примеры в документации Mozilla .Пример кода
Пример (также из документов):
Примечания по совместимости
Вы можете использовать функции стрелок в Node, но поддержка браузера не совсем корректна.
Браузерная поддержка этой функциональности значительно улучшилась, но она все еще недостаточно распространена для большинства применений на основе браузера. По состоянию на 12 декабря 2017 года он поддерживается в текущих версиях:
Не поддерживается в:
Вы можете найти более (и более актуальную) информацию на CanIUse.com (без принадлежности).
источник
Это известно как функция стрелки, часть спецификации ECMAScript 2015 ...
Более короткий синтаксис, чем предыдущий:
DEMO
Другая удивительная вещь лексическая
this
... Обычно вы делаете что-то вроде:Но это можно переписать с помощью стрелки следующим образом:
DEMO
MDN
Подробнее о синтаксисе
Более того, вот довольно хороший ответ, когда использовать функции стрелок.
источник
Это будет «выражение функции стрелки», введенное в ECMAScript 6.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/arrow_functions
Для исторических целей (если страница вики меняется позже), это:
источник
Это функции стрелок
Также известен как Fat Arrow Functions . Это простой и понятный способ написания функциональных выражений, например
function() {}
.Стрелка функции может удалить необходимость
function
,return
и{}
при определении функций. Они являются однострочными, похожими на лямбда-выражения в Java или Python.Пример без параметров
Если в одной и той же функции стрелки необходимо сделать несколько операторов, в этом примере необходимо
queue[0]
заключить в фигурные скобки{}
. В этом случае оператор возврата не может быть опущен.Пример с 1 параметром
Вы можете опустить
{}
из вышеперечисленного.Когда есть один параметр, скобки
()
вокруг параметра могут быть опущены.Пример с несколькими параметрами
Полезный пример
Если бы мы хотели получить цену каждого фрукта в одном массиве, в ES5 мы могли бы сделать:
В ES6 с новыми функциями стрелок мы можем сделать это более кратким:
Дополнительную информацию о функциях со стрелками можно найти здесь .
Совместимость браузера
Дополнительную актуальную информацию о совместимости браузера можно найти здесь
источник
просто чтобы добавить еще один пример того, что лямбда может делать без использования карты:
источник
Как уже говорили другие, это новый синтаксис для создания функций.
Однако этот вид функций отличается от обычных:
Они связывают
this
ценность. Как объясняется в спецификации ,Они не являются конструкторами.
Это означает, что они не имеют внутреннего метода [[Construct]] и, следовательно, не могут быть созданы, например,
источник
Я прочитал, это символ
Arrow Functions
вES6
это
Использование
Arrow Function
может быть записано какMDN Docs
источник
Добавление простого примера CRUD с помощью функции Arrowfunction
источник
Недоволен другими ответами. Ответ с наибольшим количеством голосов на 2019/3/13 фактически неверен.
Краткая версия
=>
означает, что это ярлык, пишущий функцию и привязывающий ее к текущейthis
Эффективно ярлык для
Вы можете увидеть все вещи, которые были сокращены. Нам не нужно
function
, ни,return
ни,.bind(this)
ни фигурные скобки или скобкиНемного более длинный пример функции со стрелкой может быть
Показано, что если нам нужно несколько аргументов функции, нам нужны круглые скобки, а если мы хотим написать больше, чем одно выражение, нам нужны фигурные скобки и явный
return
.Важно понимать
.bind
часть, и это большая тема. Это связано с тем, чтоthis
означает в JavaScript.ВСЕ функции имеют неявный параметр с именем
this
. Какthis
устанавливается при вызове функции, зависит от того, как вызывается эта функция.принимать
Если вы называете это нормально
this
будет глобальным объектом.Если вы в строгом режиме
Это будет
undefined
Вы можете установить
this
непосредственно с помощьюcall
илиapply
Вы также можете установить
this
неявно с помощью оператора точки.
Проблема возникает, когда вы хотите использовать функцию в качестве обратного вызова или слушателя. Вы создаете класс и хотите назначить функцию в качестве обратного вызова, который обращается к экземпляру класса.
Код выше не будет работать, потому что когда элемент запускает событие и вызывает функцию,
this
значение не будет экземпляром класса.Одним из распространенных способов решения этой проблемы является использование
.bind
Поскольку синтаксис стрелки делает то же самое, что мы можем написать
bind
эффективно делает новую функцию . Еслиbind
бы не существовало, вы могли бы в принципе сделать свой собственный, как этоВ старом JavaScript без оператора распространения это было бы
Понимание того, что код требует понимания замыканий, но короткая версия
bind
создает новую функцию, которая всегда вызывает исходную функцию соthis
значением, которое было ей присвоено. Функция стрелки делает то же самое, так как они являются ярлыком дляbind(this)
источник
Как уже говорилось во всех остальных ответах, это часть синтаксиса функции стрелки ES2015. Более конкретно, это не оператор, это punctuator маркер , который отделяет параметры от тела:
ArrowFunction : ArrowParameters => ConciseBody
. Например(params) => { /* body */ }
.источник
ES6
Функции стрелок:В javascript
=>
это символ выражения функции стрелки. Выражение функции со стрелкой не имеет собственнойthis
привязки и поэтому не может использоваться как функция конструктора. например:Правила использования функций стрелок:
{}
и наreturn
утверждениеНапример:
источник
Функции со стрелками, которые обозначаются символом (=>), помогают создавать анонимные функции и методы. Это приводит к более короткому синтаксису. Например, ниже приведена простая функция «Добавить», которая возвращает сложение двух чисел.
Вышеуказанная функция становится короче благодаря использованию синтаксиса «Стрелка», как показано ниже.
Выше код состоит из двух частей, как показано на рисунке выше:
Ввод: - В этом разделе указываются входные параметры для анонимной функции.
Логика: - Этот раздел следует после символа «=>». Этот раздел имеет логику реальной функции.
Многие разработчики считают, что функция стрелки делает ваш синтаксис короче, проще и, следовательно, делает ваш код читабельным.
Если вы верите вышеприведенному предложению, то позвольте мне заверить вас, что это миф. Если вы на мгновение думаете, что правильно написанная функция с именем гораздо читабельнее, чем загадочные функции, созданные в одну строку с помощью символа стрелки.
Посмотрите код ниже, в котором определена глобальная переменная «context», эта глобальная переменная доступна внутри функции «SomeOtherMethod», которая вызывается из другого метода «SomeMethod».
Этот SomeMethod имеет локальную переменную context. Теперь, поскольку SomeOtherMethod вызывается из «SomeMethod», мы ожидаем, что он отображает «локальный контекст», но отображает «глобальный контекст».
Но если заменить вызов с помощью функции стрелки, он будет отображать «локальный контекст».
Я бы посоветовал вам прочитать эту ссылку ( функция стрелки в JavaScript ), которая объясняет все сценарии контекста javascript и в каких случаях контекст вызывающего не соблюдается.
Вы также можете увидеть демонстрацию функции Arrow с javascript в этом видео на YouTube, которое демонстрирует практически термин Context.
источник
Как уже говорили другие, обычные (традиционные) функции используют
this
объект, вызвавший функцию (например, нажатую кнопку) . Вместо этого функции-стрелки используютсяthis
из объекта, который определяет функцию.Рассмотрим две почти идентичные функции:
Фрагмент ниже демонстрирует принципиальное различие между тем, что
this
представляет для каждой функции. В обычных функциональных выходах в[object HTMLButtonElement]
то время как функции стрелки выходов[object Window]
.источник