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