Коллизия нотации "(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. Мышь не найдена. Пожалуйста, подсоедините мышь.

The type or namespace name 'IISOle' could not be found (are you missing a using directive or an assembly reference?)

Как экспортировать контакты из iPhone