Существует хорошая точка для использования !
для вызова функции, отмеченного на airbnb JavaScript guide
В общем, идея использования этого метода в отдельных файлах (ака модули), которые позже получают сцепляются. Предостережение здесь состоит в том, что файлы должны быть объединены инструментами, которые помещают новый файл в новую строку (что в любом случае является обычным для большинства инструментов concat). В этом случае использование !
поможет избежать ошибки в том случае, если ранее конкатенированный модуль пропустил конечную точку с запятой, и все же это даст гибкость, чтобы поместить их в любом порядке, не беспокоясь.
!function abc(){}()
!function bca(){}();
Будет работать одинаково как
!function abc(){}()
;(function bca(){})();
, но сохраняет два символа и произвольно выглядит лучше.
И, кстати, любой из операторов +
, -
, ~
, void
имеет тот же эффект, с точки зрения вызывающей функции, наверняка, если вы используете что-то для возврата из этой функции, они будут действовать по-другому.
abcval = !function abc(){return true;}() // abcval equals false
bcaval = +function bca(){return true;}() // bcaval equals 1
zyxval = -function zyx(){return true;}() // zyxval equals -1
xyzval = ~function xyz(){return true;}() // your guess?
, но если вы используете шаблоны IIFE для одного файла, разделите код модуля и используя инструмент concat для оптимизации (что делает однострочное одно файлное задание), чем конструкция
!function abc(/*no returns*/) {}()
+function bca() {/*no returns*/}()
Выполняет безопасное выполнение кода, то же самое, что и в самом первом примере кода.
Это вызовет ошибку. JavaScript ASI не сможет выполнить свою работу.
!function abc(/*no returns*/) {}()
(function bca() {/*no returns*/})()
Одна нота относительно унарных операторов, они будут выполнять аналогичную работу, но только в случае они не использовались в первом модуле. Таким образом, они не настолько безопасны, если у вас нет полного контроля над порядком конкатенации.
Это работает:
!function abc(/*no returns*/) {}()
^function bca() {/*no returns*/}()
Это не:
^function abc(/*no returns*/) {}()
!function bca() {/*no returns*/}()
Мне удалось решить эту проблему в WSL с помощью многострочного форматирования для bash следующим образом:
curl -i -XPOST \
> 'http://localhost:8086/query?db=test' \
> --date-urlencode \
> "q=DROP SERIES FROM WHERE "unit"='hPa'"