Подтвердить что ты не робот

Когда объявлять новую (анонимную) функцию в javascript?

Я немного смущен тем, как функции работают в javascript. Я понимаю, что это все объекты, но как это изменится, как я буду использовать их в качестве аргументов?

Например, если я пытаюсь использовать функцию обратного вызова, где второй аргумент оценивается после 1000 мс...

$(this).fadeIn(1000,function(){alert('done fading in');});

Почему я не могу добиться такого же эффекта:

$(this).fadeIn(1000,alert('done fading in'));

Если я это сделаю, он будет оценивать оба одновременно. То есть (этот) элемент исчезает, и одновременно появляется предупреждение.

Когда я вызываю alert (arg), не создаю ли я новый объект, который передается в fadeIn()?

Как именно это работает?

4b9b3361

Ответ 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