JavaScript Bang «!» Функции против ведущей точки с запятой «;» IIFEs
Airbnd предлагает Я сделаю это:
!function() {
// ...
}();
Так как:
Это гарантирует, что, если неправильно сформированный модуль забудет включить последнюю точку с запятой, в процессе производства не будет ошибок при конкатенации скриптов.
Взрыв позволяет мне обойти грамматические правила языка:
// Evaluated in Chromium 34 console.
function(){}(); // => SyntaxError: Unexpected token (
!function(){}(); // => true
И при объединении других модулей удар, кажется, делает свое дело:
!function(){}();function(){}(); // => SyntaxError: Unexpected token (
!function(){}();!function(){}(); // => true
(function(){}());!function(){}(); // => true
Однако это не кажется «безопасным», потому что, если у кого-то еще нет точки с запятой в конце его сценария:
!function(){}()!function(){}(); // => SyntaxError: Unexpected token !
(function(){}())!function(){}(); // => SyntaxError: Unexpected token !
Казалось бы, ведущая точка с запятой IIFE лучше.
;(function() {
// ...
}());
!function(){}();(function(){}()); // => undefined
(function(){}());(function(){}()); // => undefined
!function(){}();;(function(){}()); // => undefined
(function(){}());;(function(){}()); // => undefined
Я что-то пропустил? Действительно ли допустимо использовать удар "!" функции или являются ведущей точкой с запятой ";" IIFEs действительно превосходят из-за того, как они соединяются?