Javascript self-invoking functions

Доброго времени суток ! Часто, просматривая исходники какого либо js проекта, я вижу что-то вроде такого:

!(function() {
    'use strict';
    blahblah...
})();


Всё впринципе понятно, за исключением одного момента: почему перед анонимной самовызывающейся функции стоит именно "!" ? Когда ставят ";" - я понимаю зачем это делается, дабы избежать неприятных ситуаций, если кто-то забыл поставить ";" в конце файла, который например конкатенируется с этим. То есть решается такая ситуация:

console.log(123)

;(function() {
...
})();


запустив в консоли console.log(123) ;(function() { alert(123); })(); всё отрабатывает как нужно
Но если запустить console.log(123) !(function() { alert(123); })();, то вываливается ошибка SyntaxError: Unexpected token !

Так вот вопрос: какие проблемы решает этот "!" ?
  • Вопрос задан
  • 2857 просмотров
Решения вопроса 3
Конструкция ;function(){}() недопустима - синтаксическая ошибка, зато допустима !function(){}(), и это на байт короче (function(){})().
Ответ написан
linoleum
@linoleum
'!' указывает на то, что это не function declaration, а function expression. Тут важно показать интерпретатору, что эта функция входит в состав какого-то выражения, а не сама по себе.
вариант !function(){}() рабочий, так как здесь функция находится в составе выражения (отрицание). Лучше, конечно, использовать скобки (function () {} ())
Ответ написан
Комментировать
mlnkv
@mlnkv
JavaScript Developer
еще пишут так
+function(){
    /*       */   
}();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы