Я использую стороннюю библиотеку, в которой есть функция, которая принимает функции в качестве аргументов. Я выполняю несколько условных проверок, чтобы решить, добавлять ли конкретную функцию в качестве параметра, и в некоторых случаях я не хочу предоставлять функцию. В этом случае предоставление null вызывает ошибку.
Я нашел этот код, который работает, но я не совсем понимаю, что происходит.
compose(__DEV__ ? devTools() : f => f)
Является ли f => f
эквивалентно () => {}
пустой анонимной функции?
javascript
lambda
ecmascript-6
Что-то на
источник
источник
f
, по MDNОтветы:
f => f
похоже наfunction(f){ return f; }
Так близко, но не совсем то, что вы ожидали.
* - как было указано в комментариях, есть тонкие различия, но ради вашего вопроса я не думаю, что они особенно актуальны. Они очень актуальны и в других ситуациях.
источник
f => f
иfunction(f) { return f; }
:)new (f => f)
throws, у него другойtoString
и по какой-то причине я не могу грокнуть(f => f).arguments
в Chrome, но не FF или Edge.this
также отличается от других. (хотя разница может быть незаметной, еслиthis
не отображается в теле функции ... я не уверен)f => f
- функция тождества . Он просто возвращает переданный аргумент.Эта функция часто используется в качестве значений по умолчанию для процессов преобразования, поскольку она не выполняет никаких преобразований.
Нет. Пустая функция ничего не возвращает. Функция идентификации возвращает переданный аргумент.
источник
Если вы хотите знать, что
f => f
означает, левая сторона - это параметр, а правая - возвращаемое значение. Так, например,f => f*2
эквивалентно:Код, который вы описываете, возвращает все, что ему передано в качестве входных данных.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
источник
Другие уже упоминали, что
f => f
это такое , поэтому я не буду углубляться в это. Я просто собираюсь объяснить остальную часть функции, потому что есть небольшая разница междуf => f
и__DEV__ ? devTools() : f => f
__DEV__
Тернарный оператор проверяет, является ли значение истинным, и если да, возвращает функциюdevTools()
. в противном случае он возвращает функцию идентификации,f => f
которая ничего не делает. Другими словами: этот код включает некоторые функции режима разработки. Без оставшегося кода трудно сказать, что добавляет этот режим, но, по-видимому, он позволит получить дополнительную информацию журнала и меньше запутывания.источник
__DEV__ ? devTools() : f => f
ничего не присваиваетf
. Вы что-то упустили из примера кода?В любое время, столкнувшись с подобной дилеммой, вы можете использовать Babel, чтобы получить ответ.
Он вернулся так:
Кстати, => вы использовали функцию ES6, называемую стрелочным выражением . Другое проявление интереса
преобразовал бы в:
Поскольку выражения стрелочных функций всегда анонимны, имеет смысл добавить имя к функции:
преобразовал бы в
источник