Первый (testCall: function()
) - объект литеральной нотации для определения функции и присвоения ее собственности на объект (не показан). Сама функция анонимна; свойство, с которым оно связано, имеет имя, но функция этого не делает.
Вторая (function testCall()
) - именованная функция.
Именованные функции имеют несколько преимуществ перед анонимными, и поэтому, хотя вы видите первый формат довольно много, я бы рекомендовал использовать его экономно, если вообще. Именованные функции могут быть полезны с помощью ваших инструментов (отладчиков и т. П.), Тогда как анонимные функции отображаются только как ?
или (anonymous)
. More here.
По этой причине, а не так:
function doSomeNiftyAjaxyThing(foo) {
$.ajax({
url: "blah",
success: function() {
// Do something involving the successful result and `foo`
foo.bar();
}
});
}
Я обычно делать это вместо:
function doSomeNiftyAjaxyThing(foo) {
$.ajax({
url: "blah",
success: niftySuccess
});
function niftySuccess() {
// Do something involving the successful result and `foo`
foo.bar();
}
}
Это не только держать мой код немного чище (эр, на мой взгляд,), но это означает, что если что-то пошло не так внутри niftySuccess
, я дал функции имя, которое мои инструменты могут сообщить мне. Обратите внимание: кроме того, что функция имеет имя, они идентичны. – обе функции - это замыкания по аргументу foo
и все остальное внутри doSomeNiftyAjaxyThing
.
Вы могли бы попытаться дать функции имя инлайн, например, так:
function doSomeNiftyAjaxyThing(foo) {
$.ajax({
url: "blah",
success: function niftySuccess() { // <== change here, PROBLEMATIC
// Do something involving the successful result and `foo`
foo.bar();
}
});
}
Там вы объявить функцию с именем, как выражение, и присвоение результата выражения к свойству , Возможно, вы должны это сделать, но есть ряд реализаций ... аномалий в различных механизмах Javascript, которые препятствуют тому, чтобы вы могли это сделать. (Больше в статье, приведенной выше, и в this article.)
Не могли бы вы привести несколько примеров? Первый выглядит как синтаксис 'json', а последний - просто регулярный синтаксис для определения функции. – Crozin
Похоже на синтаксис JSON, но обратите внимание, что в JSON нельзя включать функции. – Pointy
@Crozin: Это объектная буквальная запись (которая JSON является подмножеством). –