code_0:вызова функции Javascript с/без скобок
(вызов foo
без скобок)
function foo(){
console.log('hello world');
}
setTimeout(foo, 2000);
Это как code_0
было выполнено:
start -> wait for 2 seconds -> 'hello world' displayed -> end
code_1:
(вызов foo
с круглыми скобками)
function foo(){
console.log('hello world');
}
setTimeout(foo(), 2000);
И это, как code_1
была выполнена:
start -> 'hello world' displayed immediately -> wait for 2 seconds -> end
Почему программа будет выполнять настолько по-разному, когда я назвал функцию со скобками? Каков основной механизм?
Извините, если этот вопрос слишком тривиален. Но я не мог найти объяснения в любом учебнике javascript для начинающих.
Так что, если функция foo имеет аргумент. Вроде: функция foo (arg) { console.log ('hello' + arg); } Как использовать setTimeout для foo, но также передать параметр 'world' для foo? – delsin
@Delsin: Вы можете передать функцию, которая вызывает эту функцию по очереди. Например: 'setTimeout (function() {foo ('some argument');}, 2000);'. Существует также встроенная функция для функций 'bind', которая устанавливает' this' и некоторые ведущие аргументы: 'setTimeout (foo.bind (null, 'some argument'), 2000);' – Ryan
@ RyanO'Hara - Сделать это немного сложным, не так ли? После аргумента задержки любые дополнительные аргументы, которые вы передаете, отправляются функции. Пример: 'setTimeout (foo, 2000, myArg1, myArg2, myArg3);' Почему бы просто не сделать это? –