Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Бесконечный setTimeout(); правильно? (https://javascript.ru/forum/events/40233-beskonechnyjj-settimeout-%3B-pravilno.html)

Max_Cohen 29.07.2013 09:02

Бесконечный setTimeout(); правильно?
 
Привет друзья!!!

Возник простой вопрос, но думаю ответа Я знаю. Но хочу знать ответы экспертов в этой области.

Можно ли поставить такой вот бесконечный setTimeout();

function aInfinity(){
...
setTimeout("aInfinity();", 111);
}
setTimeout("aInfinity();", 1111);


Вообще вопрос возник при попытка создать такую функцию, когда пользователь меняет положение ползунка на scroll-е.


Тут функция просто молчит и даже нет реакции. А тут должна быть реакция.


Вот как-то так.
Спасибо.

ksa 29.07.2013 09:04

Цитата:

Сообщение от Max_Cohen
Можно ли поставить такой вот бесконечный setTimeout();

Можно

function aInfinity() {
   ...
   setTimeout(aInfinity, 111);
};
setTimeout(aInfinity, 1111);

cyber 29.07.2013 10:23

Max_Cohen,
а не проще отслеживать событие onscroll ?
Бесконечный timeout - это плохо)

Max_Cohen 02.06.2014 14:34

Отличный вариант. Спасибо Вам!

Еще один вопрос к экспертам.

Я добавил свой метод вот так:

Object.prototype.sa=function(t,a)
{
this.setAttribute(t,a);
}


Правильно ли этот вариант? Или нужно создать только функцию на подобие этого?

function a_sa(o,t,a)
{
o.setAttribute(t,a);
}


Cпасибо.

cyber 02.06.2014 16:17

Max_Cohen,
http://learn.javascript.ru/prototype

Aetae 02.06.2014 17:45

Цитата:

Сообщение от Max_Cohen (Сообщение 314391)
Object.prototype.sa=function(t,a)
{
this.setAttribute(t,a);
}

Прототип объекта трогать не рекомендуется, т.к. в js - всё объект, и может вылезти куча глюков при неосторожности.
В крайнем случае расширять через defineProperty.

Chiz 02.06.2014 21:46

Max_Cohen, а чем Вам не понравился setInterval ?

Aetae 03.06.2014 02:37

Chiz, не знаю, чем он не понравился ему, но вообще проблема с setInterval в том, что он может в случае тормозов накапливаться, а потом единовременно пытаться применить кучу итераций, чтобы "догнать". При подходе же с setTimeout - при тормозах будет просто задержка следующего вызова.

Erolast 03.06.2014 21:58

Цитата:

что он может в случае тормозов накапливаться, а потом единовременно пытаться применить кучу итераций, чтобы "догнать".
:blink: Больше одной итерации никогда не накапливается.
<button onclick="clearInterval(interval)">Stop intreval</button>
Delay duration: <span id="delay_duration"></span>
<script>   
  var j = 0;
  var interval = setInterval(function(){document.getElementById("output").innerHTML = ++j}, 500);
  
  var date_before_delay = new Date();
  for (var i = 0; i < 1000000000*2; i++)
    ;
  var date_after_delay = new Date();

  document.getElementById("delay_duration").innerHTML = date_after_delay - date_before_delay;
</script>
<div id="output">

</div>

cyber 04.06.2014 13:44

Erolast, уверен?
http://jsfiddle.net/q2d5m/1/


Часовой пояс GMT +3, время: 18:34.