setTimeout ожидает при передаче кода, но не при передаче ссылки - PullRequest
0 голосов
/ 19 января 2012

Почему при передаче кода (в окружении '') примерно так:

setTimeout('alert("James Blunt is bad")', 5000);

Есть ли 5-секундная пауза перед показом того, что мы все знаем, и при передаче ссылки на функцию, например, так:

setTimeout(alert("James Blunt is bad"), 5000);

Нет паузы?

http://jsfiddle.net/eBcpc/

Ответы [ 3 ]

3 голосов
/ 19 января 2012

Если ваш второй пример, вы не передаете функцию.

Вы вызываете alert и передаете возвращаемое значение (и возвращаемое значениеalert не является функцией).

Ссылки на функции не заканчиваются на (…)

setTimeout(function () { alert("Hello, world"); }, 5000);

Или, при более слабой поддержке браузера, передайте аргументы для оповещения в массиве кактретий аргумент для setTimeout .:

setTimeout(alert, 5000, ["Hello, world"]);
1 голос
/ 19 января 2012

Во втором примере вы вызываете функцию alert, затем , вызывая setTimeout. Это связано с тем, что аргументы функции обрабатываются до ее вызова. (Если оповещение имело возвращаемое значение, и вы хотели передать это значение в качестве аргумента другой функции, то это именно то поведение, которое вы хотели бы.)

То, что вы хотите сделать, это передать анонимную функцию в setTimeout, а затем вызвать анонимную функцию alert, вот так:

setTimeout(function() {
        alert("James Blunt is bad");
    }, 5000);
1 голос
/ 19 января 2012

Когда вы вызываете setTimeout с аргументом кода, вы должны обернуть его в функцию:

setTimeout(function () { alert("James Blunt is bad"); }, 5000);

В противном случае, когда JavaScript выполняет setTimeout, он автоматически запускает функцию alert внадеется, что alert вернет функциональный объект, который затем может быть помещен в очередь ожидания.(Очевидно, alert не вернет функцию.)

...