+function ($) { "use strict"; }(window.jQuery);

В bootstrap и в jquery плагинах встречается запись вида:

+function ($) { "use strict"; 

}(window.jQuery);

Проведём анализ этого выражения

Введение

Самое простое — "use strict"; включение «строгого режима». Подробнее на MDN и LearnJavascript

Способы объявления функций в JS:

  • Function Declaration – обычная функция, объявленная в основном потоке кода.
  • Function Expression – объявление функции в контексте какого-либо выражения, например присваивания.
// Function Declaration
function sum(a, b) {
  return a + b;
}
sum(2,3) // 5

// Function Expression
var sum = function(a, b) {
  return a + b;
}
sum(3,2) // 5

// далее будет использован вызов аналогичный
(sum)(7,9)

Подробнее про сравнение Function Expression и Function Declaration

Создание области видимости

IIFE - Immediately Invoked Function Expression - немедленно выполняемая функция-выражение. (Функция запускается сразу при объявлении).

Синтаксис следующий:

(function() {
    ... код
})()

Внутри первых круглых скобок ни что иное как Function Expression. Можно передавать параметры:

(function(a,b) {
    ... код
    console.log(b,a); // 9,7
})(7,9)

Объявить IIFE выражение возможно другими способамм, допустим поставив перед функцией какой-либо оператор, например + или !:

+function(a,b) {
  console.log('Вызов с помощью +');
}();

!function(a,b) {
  console.log('Вызов с помощью !');
}();

Подробнее про скобки вокруг функции

Непосредственно разбор выражения

  1. объявляется IIFE (немедленно выполняемая функция-выражение)

    +function () { 
    
    }();
  2. в функцию явно передаётся объект библиотеки jQuery с помощью window.jQuery, которая внутри будет доступна через переменную с именем $.
    +function ($) { 
        // $ - просто имя параметра
    }(window.jQuery);
  3. включается «строгий режим»
    +function ($) { 
        "use strict"; 
        ...
    }(window.jQuery);

Такой приём проектирования называется «Модуль»

При написании кода с использованием библиотеки jQuery используется знак доллара. Чтобы избежать конфликтов с другими библиотеками, которые могут использовать символ доллара, рекомендуется «оборачивать» объект jQuery в IIFE, которое связывает объект jQuery с символом "$», чтобы он не переопределялся другой библиотекой во время выполнения.


Почитать:

Похожие записи

RxJS Pipeable Operators

Начиная с версии rxjs 5.5 операторы вместо цепочки вызовов применяются как параметры функции pipe.

Что такое data driven design?

Методология принятия дизайнерских решений, основанная на результатах исследований, а не на опыте, вкусе или интуиции дизайнера.

TypeScript Enum Flags (bitmask)

enum FileAccess {
    None,             // 000
    Read    = 1 << 1, // 001
    Write   = 1 << 2, // 010
    Execute = 1 << 3, // 100
    ReadWrite  = Read | Write, // 011
}

const f = FileAccess.Read | FileAccess.Execute;
f & FileAccess.Execute // true

RxJS. Delay from array

import { of, from } from 'rxjs'; 
import { map, concatMap, delay } from 'rxjs/operators';

from([2,4,6,8]).pipe(
  concatMap(item => of(item).pipe(delay(1000)))
).subscribe(console.log);