2016-10-12 5 views
-5

Я нашел thissetTimeout() Пример метода на школах W3 и заметил то, что я не могу объяснить. Пример:Почему triggerTimeout запускается мгновенно?

myVar = setTimeout(alertFunc, 3000); 

... который отлично работает. Но когда я меняю его на

myVar = setTimeout(alertFunc(), 3000); 

... тревога срабатывает мгновенно. Зачем? Разве это не должно быть одинаково?

+4

Почему добавление скобки ничего не меняет? Они не являются своего рода украшением, они означают «называть функцию». –

+2

Там * есть *, чтобы быть хорошей целью обмана. –

+0

@ T.J.Crowder Не удается найти одного приятеля. –

ответ

6

не должно быть одинаковым?

Нет, совсем нет.

setTimeout(alertFunc, 3000) передает значение alertFunc (ссылка на функцию) в setTimeout. setTimeout магазины, которые ссылаются на функцию, чтобы позвонить ей через три секунды.

setTimeout(alertFunc(), 3000)называетalertFunc, немедленно, и передает его возвращаемое значение в setTimeout. Точно так же foo(bar())звонитbar и передает его возвращаемое значение в foo.

+0

Что означает «сообщество вики»? – evolutionxbox

+2

@evolutionxbox http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts –

1

myVar = setTimeout(alertFunc(), 3000); так же, как:
aF = alertFunc(); myVar = setTimeout(aF, 3000);

Из этого вы можете видеть, что alertFunc называется вне setTimeout.

2

setTimeout() принимает функцию как первый параметр и время как второй параметр. Надеюсь, вы слышали о функциях, возвращающих функцию. Поэтому для этих случаев вы также можете вызвать функцию там.

В тот момент, когда вы добавляете () в любую функцию, она вызывает это немедленно. Таким образом, вы вызываете функцию и не возвращаете ничего для выполнения в setTimeout.

Случай 1

setTimeout(myFunc, 3000); 

Здесь вы пропускание функцию самой чтобы выполняться через 3 секунды.

Случай 2

setTimeout(myFunc(), 3000); 

Здесь вы передаете значение выполняется возврата в функции, чтобы получить казнен через 3 секунды.

Смежные вопросы