Ø´Ø§ÛØ¯ ٠ا تص٠ÛÙ Ø¨Ú¯ÛØ±ÛÙ Ú©Ù ÛÚ© تابع را ÙÙ ÛÙ Ø§ÙØ§Ù اجرا ÙÚ©ÙÛ٠ا٠ا در Ø²Ù Ø§Ù Ù Ø´Ø®ØµÛ Ø¯Ø± Ø¢ÛÙØ¯Ù اجرا Ú©ÙÛÙ . ب٠اÛ٠کار «ز٠اÙâØ¨ÙØ¯Û ÙØ±Ø§Ø®ÙاÙÛ» Ù ÛâÚ¯ÙÛÙØ¯.
د٠٠تد Ø¨Ø±Ø§Û Ø¢Ù ÙØ¬Ùد دارد:
setTimeoutب٠٠ا اجاز٠٠ÛâØ¯ÙØ¯ تا ÛÚ© تابع را بعد از Ù Ø¯ØªÛ ÛÚ© بار اجرا Ú©ÙÛÙ .setIntervalب٠٠ا اجاز٠٠ÛâØ¯ÙØ¯ Ú©Ù ÛÚ© تابع را Ø¨Ù ØµÙØ±Øª تکرار Ø´ÙÙØ¯Ù اجرا Ú©ÙÛ٠ک٠بعد از آ٠٠دت Ø²Ù Ø§Ù ÙØ±Ø§Ø®ÙاÙÛ Ø´Ø±ÙØ¹ Ù ÛâØ´ÙØ¯ ٠سپس Ø¨Ù Ø·ÙØ± Ù¾ÛÙØ³ØªÙ با ÙÙ Ø§Ù ÙØ§ØµÙ٠ز٠اÙÛ ØªÚ©Ø±Ø§Ø± Ù ÛâØ´ÙØ¯.
اÛÙ Ù ØªØ¯ÙØ§ جزء ٠شخصات Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÙÛØ³ØªÙد. ا٠ا اکثر Ù ØÛØ·âÙØ§ ز٠اÙâØ¨ÙØ¯ درÙÙÛ Ø¯Ø§Ø±ÙØ¯ ٠اÛÙ Ù ØªØ¯ÙØ§ را ÙØ±Ø§ÙÙ Ù ÛâÚ©ÙÙØ¯. Ø®ØµÙØµØ§Ø اÛÙ Ù ØªØ¯ÙØ§ در ØªÙ Ø§Ù Ù Ø±ÙØ±Ú¯Ø±Ùا Ù Node.js Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ù ÛâØ´ÙÙØ¯.
تابع setTimeout
سÛÙØªÚ©Ø³:
let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)
Ù¾Ø§Ø±Ø§Ù ØªØ±ÙØ§:
func|code- تابع ÛØ§ رشتÙâØ§Û Ø§Ø² کد Ø¨Ø±Ø§Û Ø§Ø¬Ø±Ø§. ٠ع٠ÙÙØ§ ÛÚ© تابع است. Ø¨ÙØ§ Ø¨Ù Ø¯ÙØ§ÛÙÛ Ù Ø±Ø¨ÙØ· Ø¨Ù Ú¯Ø°Ø´ØªÙØ ÛÚ© رشت٠از کد را ÙÙ Ù ÛâØªÙØ§Ù ÙØ±Ø§Ø± داد ا٠ا Ù¾ÛØ´ÙÙØ§Ø¯ ÙÙ ÛâØ´ÙØ¯.
delay- Ù ÛØ²Ø§Ù ØªØ§Ø®ÛØ± ÙØ¨Ù از Ø§Ø¬Ø±Ø§Ø Ø¨Ù Ù ÛÙÛâØ«Ø§ÙÛÙ (1000 Ù ÛÙÛâØ«Ø§ÙÛÙ = 1 ثاÙÛÙ)Ø Ø¨Ù Ø·ÙØ± Ù¾ÛØ´âÙØ±Ø¶ 0 است.
arg1,arg2â¦- آرگÙ٠اÙâÙØ§Û تابع
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اÛ٠کد sayHi() را بعد از ÛÚ© ثاÙÛÙ ÙØ±Ø§ Ù
ÛâØ®ÙØ§Ùد:
function sayHi() {
alert('Ø³ÙØ§Ù
');
}
setTimeout(sayHi, 1000);
با آرگÙ٠اÙâÙØ§:
function sayHi(phrase, who) {
alert( phrase + 'Ø ' + who );
}
setTimeout(sayHi, 1000, "Ø³ÙØ§Ù
", "John"); // John ØØ³ÙاÙ
اگر اÙÙÛ٠آرگÙÙ Ø§Ù Ø±Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø³Ù¾Ø³ Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÛÚ© تابع از Ø¢Ù Ù ÛâØ³Ø§Ø²Ø¯.
پس اÛ٠کار Ù ÛâÚ©ÙØ¯:
setTimeout("alert('Ø³ÙØ§Ù
')", 1000);
ا٠ا Ø§Ø³ØªÙØ§Ø¯Ù از رشتÙâÙØ§ Ù¾ÛØ´ÙÙØ§Ø¯ ÙÙ ÛâØ´ÙØ¯Ø Ø¨Ù Ø¬Ø§Û Ø¢ÙÙØ§ از تابعâÙØ§Û ک٠اÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø ٠اÙÙØ¯ اÛÙØ¬Ø§:
setTimeout(() => alert('Ø³ÙØ§Ù
'), 1000);
ØªÙØ³Ø¹ÙâØ¯ÙÙØ¯Ú¯Ø§Ù بÛâØªØ¬Ø±Ø¨Ù Ú¯Ø§ÙÛ Ø§ÙÙØ§Øª با اضاÙÙ Ú©Ø±Ø¯Ù Ù¾Ø±Ø§ÙØªØ² () بعد از تابع Ø¯ÚØ§Ø± اشتبا٠Ù
ÛâØ´ÙÙØ¯:
// !اشتبا٠است
setTimeout(sayHi(), 1000);
اÛ٠کار ÙÙ
ÛâÚ©ÙØ¯ ÚÙÙ setTimeout تÙÙØ¹ Ø±Ø¬ÙØ¹ ب٠تابع را دارد. ٠اÛÙØ¬Ø§ sayHi() تابع را اجرا Ù
Ûâکد Ù ÙØªÛج٠اجرا شد٠آ٠ب٠setTimeout ÙØ±Ø³ØªØ§Ø¯Ù Ù
ÛâØ´ÙØ¯. در اÛÙ Ù
ÙØ±Ø¯ Ù
Ø§Ø ÙØªÛج٠sayHi() برابر با undefined است (تابع ÚÛØ²Û را برÙÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯) پس ÚÛØ²Û زÙ
اÙâØ¨ÙØ¯Û ÙÙ
ÛâØ´ÙØ¯.
ÙØºÙ کرد٠با clearTimeout
ÙØ±Ø§Ø®ÙاÙÛ setTimeout ÛÚ© Â«Ø´ÙØ§Ø³ÙâÛ ØªØ§ÛÙ
ر» timerId را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯ Ú©Ù Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
Ø¨Ø±Ø§Û ÙØºÙ کرد٠اجرا شد٠از Ø¢Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
سÛÙØªÚ©Ø³ Ø¨Ø±Ø§Û ÙØºÙ کردÙ:
let timerId = setTimeout(...);
clearTimeout(timerId);
در کد پاÛÛÙØ ٠ا Ø§Ø¬Ø±Ø§Û ØªØ§Ø¨Ø¹ را ز٠اÙâØ¨ÙØ¯Û Ù ÛâÚ©ÙÛ٠٠سپس آ٠را ÙØºÙ Ù ÛâÚ©ÙÛÙ (تص٠Û٠دÛÚ¯Ø±Û Ú¯Ø±ÙØªÛÙ ). در ÙØªÛØ¬ÙØ ÚÛØ²Û Ø§ØªÙØ§Ù ÙÙ ÛâØ§ÙØªØ¯:
let timerId = setTimeout(() => alert("ÙÛÚÙÙØª رخ ÙÙ
ÛâØ¯ÙØ¯"), 1000);
alert(timerId); // Ø´ÙØ§Ø³ÙâÛ ØªØ§ÛÙ
ر
clearTimeout(timerId);
alert(timerId); // (ÙÙ
ÛâØ´ÙØ¯ null بعد از ÙØºÙ کردÙ) Ø´ÙØ§Ø³Ù ÛکساÙ
ÙÙ
Ø§ÙØ·Ùر ک٠از Ø®Ø±ÙØ¬Û alert Ù
ÛâØ¨ÛÙÛÙ
Ø Ø¯Ø± ÛÚ© Ù
Ø±ÙØ±Ú¯Ø±Ø Ø´ÙØ§Ø³ÙâÛ ØªØ§ÛÙ
ر ÛÚ© عدد است. در Ù
ØÛØ·âÙØ§Û دÛÚ¯Ø±Ø Ø§ÛÙ Ù
ÛâØªÙØ§Ùد ÚÛØ² دÛÚ¯Ø±Û Ø¨Ø§Ø´Ø¯. Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Node.js ÛÚ© Ø´ÛØ¡ تاÛÙ
ر ÙÙ
را٠با Ù
ØªØ¯ÙØ§Û اضاÙÛ Ø±Ø§ برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
باز ÙÙ Ø Ù Ø´Ø®ØµØ§Øª Ø¬Ø§Ù Ø¹Û Ø¨Ø±Ø§Û Ø§ÛÙ Ù ØªØ¯ÙØ§ ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯ پس Ù Ø´Ú©ÙÛ ÙÛØ³Øª.
Ø¨Ø±Ø§Û Ù Ø±ÙØ±Ú¯Ø±ÙØ§Ø ØªØ§ÛÙ Ø±ÙØ§ در ÙØ³Ù ت تاÛÙ Ø±ÙØ§Û Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯ HTML5 ÙØ³ØªÙد.
تابع setInterval
Ø±ÙØ´ setInterval سÛÙØªÚ©Ø³ Ù
شابÙÛ Ø¨Ø§ setTimeout دارد:
let timerId = setInterval(func|code, [delay], [arg1], [arg2], ...)
تÙ
اÙ
آرگÙÙ
اÙâÙØ§ Ù
عÙÛ ÛکساÙÛ Ø¯Ø§Ø±ÙØ¯. اÙ
ا Ø¨Ø±Ø®ÙØ§Ù setTimeout تابع را Ù٠تÙÙØ§ ÛÚ© بار بÙک٠بعد از Ù
دت زÙ
Ø§Ù Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø¨Ù Ø·ÙØ± Ù
ÙØ¸Ù
اجرا Ù
ÛâÚ©ÙØ¯.
Ø¨Ø±Ø§Û Ù
تÙÙÙ Ú©Ø±Ø¯Ù ÙØ±Ø§Ø®ÙاÙÛâÙØ§Û Ø¨ÛØ´ØªØ±Ø Ù
ا Ø¨Ø§ÛØ¯ clearInterval(timerId) را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ
.
٠ثا٠پاÛÛÙ Ù¾ÛØ§Ù را ÙØ± 2 ثاÙÛÙ ÙØ´Ø§Ù Ù ÛâØ¯ÙØ¯. بعد از 5 ثاÙÛÙØ Ø®Ø±ÙØ¬Û ٠تÙÙÙ Ù ÛâØ´ÙØ¯:
// با ÙØ§ØµÙÙ 2 ثاÙÛ٠تکرار Ù
ÛâØ´ÙØ¯
let timerId = setInterval(() => alert('tick'), 2000);
// بعد از 5 ثاÙÛÙ Ù
تÙÙÙ Ù
ÛâØ´ÙØ¯
setTimeout(() => { clearInterval(timerId); alert('stop'); }, 5000);
alert ÙÙ
Ø§ÛØ´ داد٠Ù
ÛâØ´ÙØ¯ زÙ
ا٠Ù
Ûâگذرددر اکثر Ù
Ø±ÙØ±Ú¯Ø±Ùا ک٠شاÙ
Ù Chrome Ù Firefox ÙÙ
Ù
ÛâØ´ÙØ¯Ø تاÛÙ
ر درÙÙÛ Ø¯Ø± ØÛÙ ÙÙ
Ø§ÛØ´ alert/confirm/prompt ب٠«تÛÚ© Ø®ÙØ±Ø¯Ù» اداÙ
Ù Ù
ÛâØ¯ÙØ¯.
Ø¨ÙØ§Ø¨Ø±Ø§Û٠اگر Ø´Ù
ا کد Ø¨Ø§ÙØ§ را اجرا Ú©ÙÛØ¯ Ù Ø¨Ø±Ø§Û ÚÙØ¯ ثاÙÛÙ Ù¾ÙØ¬Ø±Ù alert را رد ÙÚ©ÙÛØ¯Ø سپس alert Ø¨Ø¹Ø¯Û Ø¨ÙØ§ÙاصÙ٠بعد از اÛÙک٠آ٠را رد Ú©ÙÛØ¯ ÙÙ
Ø§ÛØ´ داد٠Ù
ÛâØ´ÙØ¯. ÙØ§ØµÙ٠زÙ
اÙÛ ÙØ§ÙØ¹Û Ø¨ÛÙ alertÙØ§ Ú©ÙØªØ§ÙâØªØ± از 2 ثاÙÛÙ Ø®ÙØ§Ùد Ø¨ÙØ¯.
تابع setTimeout ØªÙØ¯Ø±ØªÙ
Ø¯Ù Ø±Ø§Ù Ø¨Ø±Ø§Û Ø§ÙØ¬Ø§Ù ÚÛØ²Û Ø¨Ù Ø·ÙØ± Ù ÙØ¸Ù Ù Ù¾Û Ø¯Ø± Ù¾Û ÙØ¬Ùد دارد.
ÛÚ©Û Ø§Ø² Ø¢ÙÙØ§ setInterval است. را٠دÛگر ÛÚ© setTimeout ØªÙØ¯Ø±ØªÙ Ø§Ø³ØªØ Ù
اÙÙØ¯ اÛÙ:
/** :Ø¨Ù Ø¬Ø§Û Ø§ÛÙ
let timerId = setInterval(() => alert('tick'), 2000);
*/
let timerId = setTimeout(function tick() {
alert('tick');
timerId = setTimeout(tick, 2000); // (*)
}, 2000);
تابع setTimeout Ø¨Ø§ÙØ§ ÙØ±Ø§Ø®ÙاÙÛ Ø¨Ø¹Ø¯Û Ø±Ø§ درست Ø¨Ø±Ø§Û Ø§ÙØªÙØ§Û ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÙÙÛ (*) زÙ
اÙâØ¨ÙØ¯Û Ù
ÛâÚ©ÙØ¯.
setTimeout ØªÙØ¯Ø±ØªÙ ÙØ³Ø¨Øª ب٠setInterval Ø§ÙØ¹Ø·Ø§Ù Ø¨ÛØ´ØªØ±Û دارد. در اÛÙ Ø±ÙØ´ Ø¨Ø³ØªÙ Ø¨Ù ÙØªØ§Ûج ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÙÙÛØ ÙØ±Ø§Ø®ÙاÙÛ Ø¨Ø¹Ø¯Û Ù
Ù
ک٠است زÙ
اÙâØ¨ÙØ¯Û Ù
ØªÙØ§ÙØªÛ Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ ٠ا ÙÛØ§Ø² دارÛ٠ک٠سرÙÛØ³Û بÙÙÛØ³Û٠تا ÙØ± 5 ثاÙÛÙ ÛÚ© Ø¯Ø±Ø®ÙØ§Ø³Øª Ø¨Ù Ø³Ø±ÙØ± Ø¨ÙØ±Ø³ØªØ¯ Ù Ø¨Ø±Ø§Û Ø¯Ø§Ø¯Ù Ø¯Ø±Ø®ÙØ§Ø³Øª Ú©ÙØ¯ ا٠ا در Ø¯Ø±ØµÙØ±ØªÛ Ú©Ù Ø³Ø±ÙØ± Ø´ÙÙØº Ø¨Ø§Ø´Ø¯Ø Ø¨Ø§ÛØ¯ ÙØ§ØµÙ٠ز٠اÙÛ Ø±Ø§ ب٠10Ø 20Ø 40 ثاÙÛÙ Ø§ÙØ²Ø§ÛØ´ Ø¯ÙØ¯â¦
اÛÙØ¬Ø§ ÛÚ© شب٠کد دارÛÙ :
let delay = 5000;
let timerId = setTimeout(function request() {
...ÙØ±Ø³ØªØ§Ø¯Ù Ø¯Ø±Ø®ÙØ§Ø³Øª...
if (Ø¯Ø±Ø®ÙØ§Ø³Øª ب٠دÙÛÙ Ø´ÙÙØºÛ Ø³Ø±ÙØ± شکست Ø®ÙØ±Ø¯) {
// ÙØ§ØµÙ٠زÙ
اÙÛ Ø±Ø§ در ÙØ±Ø§Ø®ÙاÙÛ Ø¨Ø¹Ø¯Û Ø§ÙØ²Ø§ÛØ´ دÙÛØ¯
delay *= 2;
}
timerId = setTimeout(request, delay);
}, delay);
٠اگر تابعâÙØ§ÛÛ Ú©Ù Ù Ø§ ز٠اÙâØ¨ÙØ¯Û Ù ÛâÚ©ÙÛ٠از Ù¾Ø±Ø¯Ø§Ø²ÙØ¯Ù Ø²ÛØ§Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÙØ¯Ø Ù ÛâØªÙØ§ÙÛ٠ز٠اÙÛ Ú©Ù ØªÙØ³Ø· ÛÚ© بار اجرا شد٠ÙÛØ§Ø² است را Ø§ÙØ¯Ø§Ø²Ù Ø¨Ú¯ÛØ±Û٠٠سپس ÙØ±Ø§Ø®ÙاÙÛ Ø¨Ø¹Ø¯Û Ø±Ø§ Ø²ÙØ¯ØªØ± ÛØ§ Ø¯ÛØ±ØªØ± ز٠اÙâØ¨ÙØ¯Û Ú©ÙÛÙ .
setTimeout ØªÙØ¯Ø±ØªÙ ب٠Ù
ا اجاز٠Ù
ÛâØ¯ÙØ¯ Ú©Ù ÙØ§ØµÙ٠زÙ
اÙÛ Ø¨ÛÙ ÙØ±Ø§Ø®ÙاÙÛâÙØ§ را ÙØ³Ø¨Øª ب٠setInterval دÙÛÙâØªØ± ØªÙØ¸ÛÙ
Ú©ÙÛÙ
.
Ø¨ÛØ§ÛÛØ¯ Ø¯Ù ÙØ·Ø¹Ù کد را Ù
ÙØ§Ûس٠کÙÛÙ
. اÙÙÛ Ø§Ø² setInterval Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯:
let i = 1;
setInterval(function() {
func(i++);
}, 100);
دÙÙ
Û Ø§Ø² setTimeout ØªÙØ¯Ø±ØªÙ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯:
let i = 1;
setTimeout(function run() {
func(i++);
setTimeout(run, 100);
}, 100);
در setInterval زÙ
اÙâØ¨ÙØ¯ داخÙÛ func(i++) را ÙØ± 100 Ù
ÛÙÛâØ«Ø§ÙÛ٠اجرا Ù
ÛâÚ©ÙØ¯:
Ø¢ÛØ§ Ù ØªÙØ¬Ù Ø´Ø¯ÛØ¯?
ÙØ§ØµÙ٠زÙ
اÙÛ ÙØ§ÙØ¹Û Ø¨ÛÙ ÙØ±Ø§Ø®ÙاÙÛâÙØ§Û func Ø¨Ø±Ø§Û setInterval Ú©Ù
تر از زÙ
ا٠Ù
ÙØ¬Ùد در کد است!
اÛÙ Ù
ÙØ¶Ùع Ø¹Ø§Ø¯Û Ø§Ø³Øª ÚÙÙ Ù
دت زÙ
اÙÛ Ú©Ù Ø¨Ø±Ø§Û Ø§Ø¬Ø±Ø§Û func صر٠Ù
ÛâØ´ÙØ¯ Ø¨Ø®Ø´Û Ø§Ø² ÙØ§ØµÙ٠زÙ
اÙÛ Ø±Ø§ «اشغا٠Ù
ÛâÚ©ÙØ¯Â».
Ù
Ù
ک٠است Ø§Ø¬Ø±Ø§Û func از زÙ
اÙÛ Ú©Ù Ù
ا تÙÙØ¹ داشتÛÙ
Ø¨ÛØ´ØªØ± Ø·Ù٠بکشد Ù Ø¨ÛØ´ØªØ± از 100 Ù
ÛÙÛâØ«Ø§ÙÛ٠زÙ
ا٠ببرد.
در اÛÙ ØµÙØ±Øª Ù
ÙØªÙر صبر Ù
ÛâÚ©ÙØ¯ تا Ø§Ø¬Ø±Ø§Û func کاÙ
Ù Ø´ÙØ¯ سپس زÙ
اÙâØ¨ÙØ¯ را Ø¨Ø±Ø±Ø³Û Ù
ÛâÚ©ÙØ¯ ٠اگر زÙ
Ø§Ù ÙØ±Ø§Ø®ÙاÙÛ Ø±Ø³ÛØ¯Ù Ø¨Ø§Ø´Ø¯Ø Ø¨ÙØ§ÙاصÙ٠آ٠را Ø¯ÙØ¨Ø§Ø±Ù اجرا Ù
ÛâÚ©ÙØ¯.
در Ù
ÙØ±Ø¯ ØØ³Ø§Ø³Ø اگر Ø§Ø¬Ø±Ø§Û ØªØ§Ø¨Ø¹ ÙÙ
ÛØ´Ù Ø¨ÛØ´ØªØ± از delay Ù
ÛÙÛâØ«Ø§ÙÛÙ Ø·ÙÙ Ø¨Ú©Ø´Ø¯Ø Ø³Ù¾Ø³ ÙØ±Ø§Ø®ÙاÙÛâÙØ§ بدÙÙ Ø§ÙØ¯Ú©Û Ù
Ú©Ø« رخ Ù
ÛâØ¯ÙÙØ¯.
٠اÛÙØ¬Ø§ تصÙÛØ±Û Ø¨Ø±Ø§Û setTimeout ØªÙØ¯Ùت٠دارÛÙ
:
setTimeout ØªÙØ¯Ø±ØªÙ ÙØ§ØµÙ٠زÙ
اÙÛ Ø«Ø§Ø¨Øª را تضÙ
ÛÙ Ù
ÛâÚ©ÙØ¯ (اÛÙØ¬Ø§ 100 Ù
ÛÙÛâØ«Ø§ÙÛÙ).
ب٠اÛ٠دÙÛÙ Ú©Ù ÙØ±Ø§Ø®ÙاÙÛ Ø¬Ø¯ÛØ¯ در Ø§ÙØªÙØ§Û ÙØ±Ø§Ø®ÙاÙÛ ÙØ¨ÙÛ Ø²Ù Ø§ÙâØ¨ÙØ¯Û Ù ÛâØ´ÙØ¯.
زÙ
اÙÛ Ú©Ù ÛÚ© تابع در setInterval/setTimeout ÙØ±Ø§Ø± Ø¯Ø§Ø¯Ù Ø´Ø¯Ø ÛÚ© Ø±Ø¬ÙØ¹ درÙÙÛ Ø¨Ù Ø¢Ù Ø³Ø§Ø®ØªÙ Ù
ÛâØ´ÙØ¯ ٠در زÙ
اÙâØ¨ÙØ¯ Ø°Ø®ÛØ±Ù Ù
ÛâØ´ÙØ¯. اÛÙ Ø±Ø¬ÙØ¹ تابع را از زباÙÙâØ±ÙØ¨Û ÙØ¬Ø§Øª Ù
ÛâØ¯ÙØ¯ ØØªÛ اگر ÙÛÚ Ø±Ø¬ÙØ¹ دÛÚ¯Ø±Û Ø¨Ù Ø¢Ù ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد.
// تابع تا زÙ
اÙÛ Ú©Ù Ø²Ù
اÙâØ¨ÙØ¯ آ٠را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙØ¯ درÙÙ ØØ§Ùظ٠Ù
ÛâÙ
Ø§ÙØ¯
setTimeout(function() {...}, 100);
Ø¨Ø±Ø§Û setInterval تابع تا زÙ
اÙÛ Ú©Ù clearInterval ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯ درÙÙ ØØ§Ùظ٠Ù
ÛâÙ
Ø§ÙØ¯.
ÛÚ© Ø¹Ø§Ø±Ø¶Ù Ø¬Ø§ÙØ¨Û ÙØ¬Ùد دارد. ÛÚ© تابع ب٠٠ØÛØ· ÙØºÙÛ Ø¨ÛØ±ÙÙÛ Ø±Ø¬ÙØ¹ Ù ÛâÚ©ÙØ¯ Ù¾Ø³Ø ØªØ§ ز٠اÙÛ Ú©Ù ØªØ§Ø¨Ø¹ ÙØ¬Ùد Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ù ØªØºÛØ±ÙØ§Û Ø¨ÛØ±ÙÙÛ ÙÙ ÙØ¬Ùد Ø®ÙØ§ÙÙØ¯ داشت. Ø¢ÙÙØ§ ØØ§ÙØ¸Ù Ø¨Ø³ÛØ§Ø± Ø¨ÛØ´ØªØ±Û را ÙØ³Ø¨Øª Ø¨Ù Ø®ÙØ¯ تابع اشغا٠٠ÛâÚ©ÙÙØ¯. پس ز٠اÙÛ Ú©Ù Ø¯Ûگر ÙÛØ§Ø²Û ب٠تابع ز٠اÙâØ¨ÙØ¯Û Ø´Ø¯Ù ÙØ¯Ø§Ø±ÛÙ Ø Ø¨ÙØªØ± است ک٠آ٠را ÙØºÙ Ú©ÙÛÙ ØØªÛ اگر Ø®ÛÙÛ Ú©ÙÚÚ© باشد.
تابع setTimeout بدÙÙ ØªØ§Ø®ÛØ±
ÛÚ© Ù
ÙØ±Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù خاص ÙØ¬Ùد دارد: setTimeout(func, 0) ÛØ§ ÙÙØ· setTimeout(func).
اÛÙ Ù
ÙØ±Ø¯ Ø§Ø¬Ø±Ø§Û func را Ø¨Ø±Ø§Û ÙØ²Ø¯ÛÚ©âØªØ±ÛÙ Ù
ÙÙØ¹ زÙ
اÙâØ¨ÙØ¯Û Ù
ÛâÚ©ÙØ¯. اÙ
ا زÙ
اÙâØ¨ÙØ¯ Ø¢ÙØ±Ø§ بعد از اÛÙÚ©Ù Ø§Ø¬Ø±Ø§Û Ø§Ø³Ú©Ø±Ûپت Ú©ÙÙÙÛ ØªÙ
اÙ
شد ÙØ±Ø§ Ù
ÛâØ®ÙØ§Ùد.
پس تابع ز٠اÙâØ¨ÙØ¯Û Ù ÛâØ´ÙØ¯ تا «درست بعد از» اسکرÛپت Ú©ÙÙÙÛ Ø§Ø¬Ø±Ø§ Ø´ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ اÛ٠کد âHelloâ Ø±Ø§ ÙÙ Ø§ÛØ´ Ù ÛâØ¯ÙØ¯Ø سپس Ø¨ÙØ§ÙاصÙÙ âWorldâ Ø±Ø§:
setTimeout(() => alert("World"));
alert("Hello");
خط اÙÙ Â«ÙØ±Ø§Ø®ÙاÙÛ Ø±Ø§ بعد از 0 Ù
ÛÙÛâØ«Ø§ÙÛ٠در تÙÙÛÙ
» Ù
Ûâگذارد. اÙ
ا زÙ
اÙâØ¨ÙØ¯ ÙÙØ· بعد از اÛÙک٠اسکرÛپت Ú©ÙÙÙÛ Ú©Ø§Ù
٠شد «تÙÙÛÙ
را Ø¨Ø±Ø±Ø³Û Ù
ÛâÚ©ÙØ¯Â» پس "Hello" اÙÙ Ù
ÛâØ¢ÛØ¯ Ù "World" بعد از Ø¢Ù.
ÙÙ ÚÙÛÙ Ù ÙØ§Ø±Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù Ù¾ÛØ´Ø±ÙØªÙ Ù Ø±Ø¨ÙØ· Ø¨Ù Ù Ø±ÙØ±Ú¯Ø± از ز٠اÙâØ¨ÙØ¯Û با ØªØ§Ø®ÛØ± 0 ÙØ¬Ùد Ø¯Ø§Ø±ÙØ¯ ک٠٠ا در ÙØµÙ Event loop: microtasks Ù macrotasks ب٠آÙÙØ§ Ù ÛâپردازÛÙ .
<<<<<<< HEAD
در Ù Ø±ÙØ±Ú¯Ø±Ø ÛÚ© Ù ØØ¯ÙØ¯ÛØª Ø¨Ø±Ø§Û Ø§ÛÙک٠تاÛÙ Ø±ÙØ§Û ØªÙØ¯Ø±ØªÙ ÙØ± ÚÙØ¯ ÙÙØª ÛÚ© بار Ù ÛâØªÙØ§ÙÙØ¯ اجرا Ø´ÙÙØ¯ ÙØ¬Ùد دارد. Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯ HTML5 Ù ÛâÚ¯ÙÛØ¯: «بعد از 5 تاÛ٠ر ØªÙØ¯Ø±ØªÙØ ÙØ§ØµÙ٠ز٠اÙÛ ÙØ§Úار Ù ÛâØ´ÙØ¯ Ú©Ù ØØ¯Ø§ÙÙ 4 Ù ÛÙÛâØ«Ø§ÙÛ٠باشد.».
In the browser, thereâs a limitation of how often nested timers can run. The HTML Living Standard says: âafter five nested timers, the interval is forced to be at least 4 milliseconds.â.
18b1314af4e0ead5a2b10bb4bacd24cecbb3f18e
Ø¨ÛØ§ÛÛØ¯ با Ù
ثا٠پاÛÛÙ ÙØ´Ø§Ù دÙÛÙ
ک٠اÛÙ ÛØ¹ÙÛ ÚÙ. ÙØ±Ø§Ø®ÙاÙÛ setTimeout در Ù
Ø«Ø§Ù Ø²ÛØ± Ø®ÙØ¯Ø´ را با ØªØ§Ø®ÛØ± ØµÙØ± Ø¯ÙØ¨Ø§Ø±Ù زÙ
اÙâØ¨ÙØ¯Û Ù
ÛâÚ©ÙØ¯. ÙØ± ÙØ±Ø§Ø®ÙاÙÛ Ø²Ù
Ø§Ù ÙØ§ÙØ¹Û Ú¯Ø°Ø´ØªÙ Ø§Ø² ÙØ±Ø§Ø®ÙاÙÛ ÙØ¨ÙÛ Ø±Ø§ در آراÛÙ times Ø°Ø®ÛØ±Ù Ù
ÛâÚ©ÙØ¯. ØªØ§Ø®ÛØ±ÙØ§Û ÙØ§ÙØ¹Û ÚÚ¯ÙÙÙ Ø¨ÙØ¸Ø± Ù
ÛâØ±Ø³ÙØ¯Ø Ø¨ÛØ§ÛÛØ¯ ببÛÙÛÙ
:
let start = Date.now();
let times = [];
setTimeout(function run() {
times.push(Date.now() - start); // ÙØ§ØµÙ٠زÙ
اÙÛ Ø§Ø² ÙØ±Ø§Ø®ÙاÙÛ ÙØ¨ÙÛ Ø±Ø§ Ø¨Ù ÛØ§Ø¯ Ù
ÛâØ³Ù¾Ø§Ø±Ø¯
if (start + 100 < Date.now()) alert(times); // ÙØ§ØµÙÙâÙØ§Û زÙ
اÙÛ Ø±Ø§ بعد از 100 Ù
ÛÙÛâØ«Ø§ÙÛÙ ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯
else setTimeout(run); // در ØºÛØ± اÛÙ ØµÙØ±Øª Ø¯ÙØ¨Ø§Ø±Ù زÙ
اÙâØ¨ÙØ¯Û Ù
ÛâÚ©ÙØ¯
});
// :Ù
ثاÙÛ Ø§Ø² Ø®Ø±ÙØ¬Û
// 1,1,1,1,9,15,20,24,30,35,40,45,50,55,59,64,70,75,80,85,90,95,100
ابتدا تاÛÙ
Ø±ÙØ§ Ø¨ÙØ§ÙاصÙ٠اجرا Ù
ÛâØ´ÙÙØ¯ (ÙÙ
Ø§ÙØ·Ùر ک٠در Ù
شخصات ÙÙØ´ØªÙ شدÙ) ٠سپس Ù
ا ...24 ,20 ,15 ,9 را Ù
ÛâØ¨ÛÙÛÙ
. ÙØ§ØµÙ٠زÙ
اÙÛ٠اجبارÛÙ Ø¨ÛØ´ØªØ± از 4 Ù
ÛÙÛâØ«Ø§ÙÛÙ Ø¨Ø±Ø§Û ÙØ±Ø§Ø®ÙاÙÛâÙØ§ ÙØ§Ø±Ø¯ Ø¨Ø§Ø²Û Ù
ÛâØ´ÙØ¯.
ÙÙ
ÚÛÙ ÚÛØ²Û اگر Ù
ا از setInterval Ø¨Ù Ø¬Ø§Û setTimeout Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
رخ Ù
ÛâØ¯ÙØ¯: setInterval(f0 تابع f را ÚÙØ¯ بار با ØªØ§Ø®ÛØ± ØµÙØ± اجرا Ù
ÛâÚ©ÙØ¯ ٠بعد از آ٠با ØªØ§Ø®ÛØ± Ø¨ÛØ´ØªØ± از 4 Ù
ÛÙÛâØ«Ø§ÙÛÙ.
اÛÙ Ù ØØ¯ÙØ¯ÛØª از ÙØ¯ÛÙ ÙØ¬Ùد داشت٠٠اسکرÛپتâÙØ§Û Ø²ÛØ§Ø¯Û بر آ٠تکÛÙ Ú©Ø±Ø¯Ù Ø§ÙØ¯ پس Ø¨ÙØ§ Ø¨Ù Ø¯ÙØ§ÛÙÛ Ù Ø±Ø¨ÙØ· ب٠گذشت٠ÙÙÙØ² ÙÙ ÙØ¬Ùد دارد.
Ø¨Ø±Ø§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت س٠ت Ø³Ø±ÙØ±Ø اÛÙ Ù ØØ¯ÙØ¯ÛØª ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯ ٠راÙâÙØ§Û دÛÚ¯Ø±Û Ø¨Ø±Ø§Û Ø²Ù Ø§ÙâØ¨ÙØ¯Û ÛÚ© کار ÙØ§Ù٠ز٠ا٠بدÙÙ ØªØ§Ø®ÛØ± ÙØ¬Ùد Ø¯Ø§Ø±ÙØ¯ ٠اÙÙØ¯ setImmediate Ø¨Ø±Ø§Û Node.js. پس اÛÙ Ùکت٠ÙÙØ· Ø¨Ø±Ø§Û Ù Ø±ÙØ±Ú¯Ø± است.
Ø®ÙØ§ØµÙ
- Ø±ÙØ´âÙØ§Û
setTimeout(func, delay, ...args)ÙsetInterval(func, delay, ...args)ب٠٠ا اجازÙâØ¯ÙÙØ¯ تاfuncرا Ûکبار/Ø¨Ù Ø·ÙØ± Ù ÙØ¸Ù بعد ازdelayÙ ÛÙÛâØ«Ø§ÙÛ٠اجرا Ú©ÙÛÙ . - Ø¨Ø±Ø§Û ÙØºÙ Ú©Ø±Ø¯Ù Ø§Ø¬Ø±Ø§Ø Ù
ا Ø¨Ø§ÛØ¯
clearTimeout/clearIntervalرا Ù٠را٠با Ù ÙØ¯Ø§Ø± Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù Ø´Ø¯Ù ØªÙØ³Ø·setTimeout/setIntervalÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ . - ÙØ±Ø§Ø®ÙاÙÛâÙØ§Û ØªÙØ¯Ø±ØªÙÛ
setTimeoutجاÛگزÛÙÛ Ù ÙØ¹Ø·ÙâØªØ± براÛsetIntervalÙØ³ØªÙد ک٠ب٠٠ا اجاز٠٠ÛâØ¯ÙØ¯ تا ز٠ا٠بÛ٠اجرا شدÙâÙØ§ را دÙÛÙâØªØ± ØªÙØ¸ÛÙ Ú©ÙÛÙ . - زÙ
اÙâØ¨ÙØ¯Û بدÙÙ ØªØ§Ø®ÛØ± با
setTimeout(func, 0)(٠شاب٠باsetTimeout(func)) Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ù ÙØ±Ø§Ø®ÙاÙÛ Ø±Ø§ «در اسرع ÙÙØª ا٠ا بعد از اÛÙک٠اسکرÛپت Ú©ÙÙÙÛ Ú©Ø§Ù Ù Ø´Ø¯Â» ز٠اÙâØ¨ÙØ¯Û Ú©ÙÛÙ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯. - Ù
Ø±ÙØ±Ú¯Ø± Ø¨Ø±Ø§Û Ù¾ÙØ¬ ÛØ§ Ø¨ÛØ´ØªØ± از Ù¾ÙØ¬ ÙØ±Ø§Ø®ÙاÙÛ ØªÙØ¯Ø±ØªÙÛ
setTimeoutÛØ§setInterval(بعد از ÙØ±Ø§Ø®ÙاÙÛ Ù¾ÙØ¬Ù ) ØØ¯Ø§ÙÙ ÙØ§ØµÙ٠ز٠اÙÛ Ø±Ø§ ب٠4 Ù ÛÙÛâØ«Ø§ÙÛÙ Ù ØØ¯Ùد Ù ÛâÚ©ÙØ¯. دÙÛ٠آ٠ÙÙ Ù Ø±Ø¨ÙØ· ب٠گذشت٠است.
ÙØ·Ùا در ÙØ¸Ø± Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯ Ú©Ù Ø±ÙØ´âÙØ§Û ز٠اÙâØ¨ÙØ¯Û ÙØ§ØµÙ٠ز٠اÙÛ Ø¯ÙÛ٠را تض٠ÛÙ ÙÙ ÛâÚ©ÙÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ تاÛ٠ر درÙÙ Ù Ø±ÙØ±Ú¯Ø± ٠٠ک٠است Ø¨Ù Ø¯ÙØ§ÛÙ Ø²ÛØ§Ø¯Û Ú©ÙØ¯ Ø´ÙØ¯:
- Ú©Ø§Ø±ÙØ§Û Ø²ÛØ§Ø¯Û Ø¨Ù Ù¾Ø±Ø¯Ø§Ø²ÙØ¯Ù سپرد٠شد٠است.
- تب (tab) Ù Ø±ÙØ±Ú¯Ø± در ØØ§Ùت Ù¾Ø³âØ²Ù ÛÙ٠است.
- ÙÙ¾ تاپ در ØØ§Ùت صرÙÙâØ¬ÙÛÛ Ø¨Ø§ØªØ±Û Ø§Ø³Øª.
All that may increase the minimal timer resolution (the minimal delay) to 300ms or even 1000ms depending on the browser and OS-level performance settings.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)