Когда объявлять новую (анонимную) функцию в javascript?
Я немного смущен тем, как функции работают в javascript. Я понимаю, что это все объекты, но как это изменится, как я буду использовать их в качестве аргументов?
Например, если я пытаюсь использовать функцию обратного вызова, где второй аргумент оценивается после 1000 мс...
$(this).fadeIn(1000,function(){alert('done fading in');});
Почему я не могу добиться такого же эффекта:
$(this).fadeIn(1000,alert('done fading in'));
Если я это сделаю, он будет оценивать оба одновременно. То есть (этот) элемент исчезает, и одновременно появляется предупреждение.
Когда я вызываю alert (arg), не создаю ли я новый объект, который передается в fadeIn()?
Как именно это работает?
Ответы
Ответ 1
В этом
$(this).fadeIn(1000,alert('done fading in'));
Что делает fadeIn() как второй аргумент? Это результат вызова
alert('done fading in')
мы вызываем вызов alert() до, вызывающего fadeIn().
В этом случае
$(this).fadeIn(1000,function(){alert('done fading in');});
у нас есть объект
function(){alert('done fading in');}
который fadeIn() вызывает в нужное время.
Ответ 2
Когда вы пишете:
$(this).fadeIn(1000,alert('done fading in'));
вы вызываете функцию, называемую alert, немедленно, поместив имя функции и скобки после этого имени. И для fadeIn результат этого вызова передается - это undefined, потому что предупреждение всегда возвращается undefined.
Когда вы пишете
$(this).fadeIn(1000,function(){alert('done fading in');});
вы создаете объект функции, который и передаете этот объект функции в fadeIn. Таким образом, после завершения fadeIn это может вызвать эту функцию.
Это то же самое, что:
// create function
var callback = function () { alert('done fading in'); };
// and pass this function to fadeIn
$(this).fadeIn(1000, callback);
но когда вы пишете:
var callback = alert('done fading in');
$(this).fadeIn(1000, callback);
то вы вызовете предупреждение безотлагательно и перейдете на значение fadeIn, которое возвращает предупреждение - undefined.
Ответ 3
В первой строке вторым параметром является метод. А во второй строке - вызов метода.
вы также можете записать его так
function fadeInCallback() {
alert('done fading in');
}
$(this).fadeIn(1000, fadeInCallback);
Итак, что мы делаем, так это то, что мы передаем ссылку на fadeInCallback, поэтому функция fadeIn jQuery может вызывать fadeInCallback, как только это делается с замиранием.
Вторая строка выполнит
alert('done fading in');
перед выполнением функции jQuery fadeIn