Есть шесть способов/контексты, в которых для создания функции:
1) Стандартной декларативный обозначения (наиболее знакомой люди с фоном C)
function foo() {}
Все остальные функции выражения:
2) в качестве метода объекта буквального
var obj = {
foo: function() {}
};
3) в качестве метода создан экземпляр объекта (созданного каждый раз, когда new
является exectued)
var Obj = function() {
this.foo = function() {};
};
4) в качестве способа прототипа (создается только один раз, независимо от того, сколько раз new
выполняется)
var Obj = function() {};
Obj.prototype.foo = function() {};
5) В качестве анонимной функции со ссылкой (такой же эффект, как # 1) *
var foo = function() {};
6) В качестве немедленно выполняется анонимно функции (полностью анонимными)
(function() {})();
* При Я смотрю на это утверждение, я считаю результат. Таким образом, я действительно не рассматриваю их как анонимные, потому что ссылка немедленно создается для этой функции и поэтому не является анонимной. Но для большинства людей это одно и то же.
Внешняя скобка на 'obj' является излишней –
Oh! Ответ на одно из моих сообщений в SO о написании кода с использованием шаблона модуля сказал, что без этих скобок иногда анонимные функции могут потерпеть неудачу. Я до сих пор не получил объяснений, почему. Не уверены, применяются ли они только к шаблонам модулей или ко всем анонимным функциям. Вот почему я добавил их. – 2009-12-08 10:49:38
Я думаю, что это только когда вы меняете объект вроде 'eval (" ({a: 1}) ")' – YOU