Совершенно резонный вопрос. :-) В JavaScript вам не обязательно вызывать функцию с таким количеством аргументов, которое она определяет, и вам не нужно определять столько аргументов, сколько вы можете вызвать. Что может сбивать с толку, если вы привыкли к более стесненным условиям. : -)
Особенности ответа:
1) Что означает функция (msg) {ServiceSucceeded (msg)}?
Он определяет функцию (анонимную), которая принимает один именованный аргумент (msg
) и вызывает ServiceSucceded
, передавая этот аргумент. jQuery вызовет функцию с тремя аргументами, определенными в документации jQuery для функции success
, но эта конкретная функция success
использует только первый из них (data
). Подробнее об именованных функциях и анонимных функциях здесь .
2) Что такое «msg» в этом контексте?
Первый аргумент функции. Документы jQuery называют этот первый аргумент data
, но вы можете называть его как хотите.
3) Как же я должен знать, как структурировать метод sugnature для успеха?
Вы правильно сделали, это в документации по jQuery.
Эта вещь в аргументах функций может сбивать с толку, поэтому давайте сделаем несколько примеров:
function foo(arg) {
alert(arg);
}
Это совершенно ясно, я определяю функцию с именем foo
, которая принимает один именованный аргумент, arg
. И таким образом:
foo("Hi there"); // alerts "Hi there"
Но я тоже могу сделать это:
foo(); // alerts "undefined"
Там я не привел никаких аргументов для foo
, поэтому в foo
, arg
не определено.
Я также могу сделать это:
foo("Hi there", "again"); // alerts "Hi there"
Я звоню foo
с двумя аргументами, но foo
использует только один из них.
Я мог бы определить foo
, чтобы использовать столько аргументов, сколько вы передаете:
function foo() {
var index;
for (index = 0; index < arguments.length; ++index) {
alert(arguments[index]);
}
}
arguments
- это автоматическая вещь, которую имеют все функции, которая является псевдомассивом (на самом деле это не Array
) фактических аргументов, с которыми была вызвана функция. И так:
foo("Hi there", "again"); // alerts "Hi there", and then alerts "again"
Вы можете даже смешивать именованные и безымянные аргументы:
function foo(arg) {
var index;
alert(arg);
for (index = 1; index < arguments.length; ++index) {
alert("[" + arguments[index] + "]");
}
}
Так что теперь
foo("Hi there", "again"); // alerts "Hi there" and then alerts "[again]"
Обратите внимание на []
вокруг второго предупреждения, потому что я начал цикл с индексом 1
вместо нуля.
arguments
и именованные аргументы связаны:
function foo(arg) {
alert("arg = " + arg);
alert("arguments[0] = " + arguments[0]);
arg = "Updated";
alert("arg = " + arg);
alert("arguments[0] = " + arguments[0]);
}
Если я сделаю foo("Hi");
, то отобразятся следующие предупреждения:
arg = Hi
arguments[0] = Hi
arg = Updated
arguments[0] = Updated
(Если вы обновляете arguments[0]
., То тоже самое)