Как передать параметры при вызове функции без круглых скобок [Javascript] - PullRequest
7 голосов
/ 24 августа 2011

У меня есть функция под названием «tryMe», и я вызываю ее без скобок, не совсем так, но идея такая, как то, что вы сделали бы здесь:

setTimeout(tryMe,200);

как я могу передать параметры, которые янужно?

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

Ответы [ 3 ]

11 голосов
/ 24 августа 2011
setTimeout(function() { tryMe(parm1, parm2); }, 200);

Более надежное предложение, гарантирующее, что значения parm1, parm2 не изменятся до истечения времени ожидания (согласно комментарию @ lincolnk):

setTimeout(function() {
   var p1 = parm1;
   var p2 = parm2;
   tryMe(p1, p2);
}, 200);

@ patrick dw, вы правы, нужно пройти оценку раньше.

4 голосов
/ 24 августа 2011

Вы можете завернуть tryMe в укупорку.

Например:

var f = function(){tryMe('some parameter');};
setTimeout(f, 200);

Здесь мы создаем объект функции f, который вызывает tryMe с требуемым параметром (ами). Затем мы передаем f на setTimeout. По истечении времени ожидания будет вызван f, который, в свою очередь, вызовет tryMe с нужными параметрами.

Слово предупреждения, если вы хотите передать параметры, которые могут измениться до вызова тайм-аута (например, если вы устанавливаете несколько тайм-аутов в цикле for): вы захотите связать эти переменные следующим образом:

var f = function(someParamter){return function(){tryMe(someParameter);};};
setTimeout(f(someParameter), 200);

Причина просто что-то вроде

setTimeout(tryMe('some parameter'), 200); //Does not work.

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

0 голосов
/ 24 августа 2011

Вы не вызываете функцию, браузер делает - через 200 миллисекунд. Вы просто предоставляете ему функцию, которую нужно вызвать. Firefox фактически позволяет указывать дополнительные параметры в вызове setTimeout:

setTimeout(tryMe, 200, "first parameter", "second parameter");

Однако, насколько мне известно, другие браузеры не поддерживают эту функцию, поэтому вам действительно следует использовать функцию закрытия, как уже объяснялось в других ответах. Здесь вы создаете временную функцию с единственной целью вызова исходной функции с правильными параметрами.

setTimeout(function() {tryMe("first parameter", "second parameter")}, 200);
...