Deine delay-Funktion kannst du noch kürzer schreiben. Das von Stackoverflow ist sehr idiotensicher gehalten. Hier eine verkürzte Schreibweise:
function delay(ms){
var start_tick = +new Date,
ms_passed = 0;
while (ms_passed < ms)
ms_passed = +new Date - start_tick;
}
Bei mir hat dein Beispiel aber auch so funktioniert, wie es sein soll:
while(1){
delay(200);
console.log('.');
}
Alle 200 Millisekunden wurde ein Punkt geloggt. So eine delay-funktion und ein while(1) ist in JavaScript aber zu vermeiden, da es eine Event basierte Programmiersprache ist und so etwas die komplette Seite anhalten würde. Dafür gibt es asyncrone alternativen, wie schon von den anderen erwähnt wurde.
Beispiel mit setInterval und setTimeout:
// mit setInterval
// 10 mal mit 200ms Verzögerung ausführen
(function(){
var i = 0;
var intID = setInterval(function(){
if (++i >= 10)
clearInterval(intID);
// irgendetwas dass 10 mal ausgeführt werden soll
console.log('.');
}, 200);
})();
// mit setTimeout
// 10 mal mit 200ms Verzögerung ausführen
(function(){
var i = 0;
var toutID = setTimeout(function x(){
if (++i < 10)
toutID = setTimeout(x, 200);
// irgendwas dass 10 mal ausgeführt werden soll
console.log('.');
}, 200);
})();
Weil man immer noch eine Zählervariable (hier i) braucht, habe ich es immer in einen eigenen Namespace geschrieben (die wrapper-Funktion (function(){ ... })() ). So wird verhindert, dass sie überschrieben wird und Fehler entstehen, die nicht sehr leicht zu finden sind.
Liebe Grüße
Win7User