Коллизия нотации "(function)();" в JavaScript или почему JavaScript разработчик будет ставить точку с запятой перед (function)();

Нотацию (function)(); в JavaScript всегда надо начинать с точки с запятой.
Это защитит от трудно определимой ошибки в интерпретации кода JavaScript-движком.


Нотация (function)(); в JavaScript чаще всего применяется в следующих случаях:
  • когда вы хотите ограничить видимость локальных переменный и поиграть с замыканиями (closures), при этом вызывая немедленное выполнение.
  • когда в проекте используется несколько JavaScript фреймворков и они бодаются за переменную по имени $. Эта нотация помогает гарантированно использовать переменную $, независимо от будущих изменений на сайте.
Пример:

;(function ($) { /* do something*/ })(jQuery);


Ниже код, объясняющий почему нужно использовать точку с запятой вначале.

function f1(inp) { alert("f1 - " + inp); }

// Ошибки не будет, все в порядке.
var f2 = function (inp) { alert("f2 - " + inp); }
; (f1)("2");

// Если следующую строку не завершить точкой с запятой, будет ошибка.
var f3 = function (inp) { alert("f3 - " + inp); }
(f1)("2");

// Если следующую строку также не завершить точкой с запятой, будет ошибка.
var int1 = 1
(f1)("1");

Причины применения:
  • Частый рефакторинг и масштабирование кода.
  • Объявления метода в переменную (var f2 = function(){}) стандартная практика, при этом закрывающая метод фигурная скобка и тело метода скрывает наглядность того, что это объявление переменной.

Комментарии

Популярные сообщения из этого блога

A4tech. Мышь не найдена. Пожалуйста, подсоедините мышь.

SVN: Пропали иконки TortoiseSVN.

Вывод в cmd или bat пустой строки.