setTimeOut выполнить функцию с параметром - PullRequest
2 голосов
/ 31 декабря 2011

Я видел этот вопрос , и мне интересно, в чем проблема с этим?

var id = 12;
setTimeout( showGrid ( 'i want to pass variable ' + id + ' here' ), 5000 );

Я прочитал вопрос, который меня интересует, чем код выше нехорошее решение.У меня установлен только Chrome, я пробовал, и он работает.Есть ли проблема с браузером?

Почему анонимная функция лучше?

Ответы [ 3 ]

5 голосов
/ 31 декабря 2011

Вы можете использовать замыкание:

var id = 12;
setTimeout(function() {
    showGrid('i want to pass variable ' + id + ' here');
}, 5000);

А вот и живая демка .

редактировать (Мило) из комментариев:

функция setTimeout ожидает обратный вызов или строковую переменную. Вы не передаете такую ​​вещь, поэтому ваш код недействителен. Вы напрямую вызываете функцию showGrid, которая не работает так, как она должна работать. Функция showGrid должна быть вызвана только через 5 секунд.

2 голосов
/ 31 декабря 2011

setTimout ожидает функцию в качестве первого аргумента и время в качестве второго аргумента, а затем необязательные аргументы для передачи в функцию.Итак, если у вас есть функция:

function showGrid( str ) {
    return str;
}

и у вас есть следующее setTimeout:

setTimeout( showGrid( "..." ), 5000 );

, то вы вызываете showGrid и передаете возвращаемое значение setTimeout, в итоге получается так:

// "..." is returned from showGrid( "..." )
setTimeout( "...", 5000 );

и "..." не является функцией.Таким образом, есть два способа обойти это, вы можете сделать вложение (как в ответе Дарина) или добавить аргумент после времени.

setTimeout( function() {
    showGrid( "..." );
}, 5000 );

// same thing
setTimeout( showGrid, 5000, "..." );

Пример: http://jsfiddle.net/fFg57/

1 голос
/ 31 декабря 2011
var id = 12;
setTimeout( "showGrid ( 'i want to pass variable " + id + " here' )", 5000 );

первый параметр принимает строку, очень похожую на то, что вы передали бы функции eval.

и обратите внимание на Small o в setTimeout

...