Знаки
!,
-,
+ заставляют интерпретатор вычислить (в данном случае - выполнить) то, что находится справа. Например, в Bootstrap всюду вставлен знак
+ для этого.
Однако, более правильным было бы переписать код так:
(function ($){
"use strict";
}(this.jQuery));
Это тоже шаблон самовызываемой функции, описан в книге
Стояна Стефанова "JavaScript. Шаблоны" (люто рекомендую читать не смотря на преклонный для литературы данного типа возраст, где взять - сами знаете).
Обращение к локальным переменным избавляет от головной боли и долгой отладки, когда непонятно, почему при клике на эту кнопку не только обновляется список записей таблицы, но и увеличивается размер шрифта в заголовке страницы. Глобальные переменные - зло, и с этим нужно бороться. Только замыкания, только хардкор.
Что касается скорости - в сравнении с перерисовкой DOM любой ваш код будет быстрым, как молния. И да, обращение к глобальным переменным дороже, чем к локальным, т.к. сначала делается поиск в локальной области видимости, и только потом - к глобальной.
document и
window можете помещать, можете не помещать - разница будет только в том, что можно использовать краткие имена:
(function (W, D){
// W = window (1 символ против 6)
// D = document (1 символ против 8)
"use strict";
}(window, document));
Всё остальное в указанной книге ну и конечно
Николас Закас, "JavaScript. Оптимизация производит....