В JavaScript есть множество способов сделать одно и то же. В этом есть и хорошее, и плохое. Для новичка это точно плохо, так как ему придется не только изучить большее количество информации, но и появится больше мест для совершения потенциальных ошибок. Это может происходить при определении функций.
Есть множество различных способов объявить функцию:
function A() {}; // декларация функции
var B = function () {}; // функциональное выражение
var C = (function () {}); // функциональное выражение с оператором группировки
var D = function foo () {}; // именованное функциональное выражение
var E = (function () {})(); // самовызывающееся функциональное выражение
var F = new Function(); // конструктор функции
var G = new function() {}; // вырожденный случай: конструктор объекта
В таком обилии сложно не запутаться, не так ли? Как правило, в повседневной жизни мы используем не более трех различных типов объявления функций, и это отлично работает. Однако если копнуть поглубже, то может оказаться, что большинство из нас даже не подозревает какой объём таинств и подводных камней хранит в себе операция объявления функции.
Читать полностью »