Доброго времени суток ! Часто, просматривая исходники какого либо js проекта, я вижу что-то вроде такого:
!(function() {
'use strict';
blahblah...
})();
Всё впринципе понятно, за исключением одного момента: почему перед анонимной самовызывающейся функции стоит именно "!" ? Когда ставят ";" - я понимаю зачем это делается, дабы избежать неприятных ситуаций, если кто-то забыл поставить ";" в конце файла, который например конкатенируется с этим. То есть решается такая ситуация:
console.log(123)
;(function() {
...
})();
запустив в консоли
console.log(123) ;(function() { alert(123); })();
всё отрабатывает как нужно
Но если запустить
console.log(123) !(function() { alert(123); })();
, то вываливается ошибка
SyntaxError: Unexpected token !
Так вот вопрос: какие проблемы решает этот "!" ?