���Ѥ�ͭ�Ѥʹͻ���������Ľ��פʻ�Ŧϳ�줬���롣

IT�ﵭ - JavaScript ��ؤֺݤ˰��ֽ��פʤΤˡ����򤵤줬���� setTimeout �Ϥγ�ǰ
setInterval��setTimeout�����٥�Ȥˤ��ؿ��μ¹Ԥ����򤹤뤳�Ȥ��Ȼפ�

�ڡ��������ĺ����褵��뤫���Ȥ������ȤǤ��롣

̤�и��Ԥϡ�document.write()��element.innerHTML = "foo"�Τ褦�ˡ��֥饦�����ˡֽ񤭽Ф��������Ǥ��줬ľ����ȿ�Ǥ����Ȼפ���������

�Ȥ������������ǤϤʤ��ΤǤ��롣

����򸫤Ƥߤ褦���ʲ���script��ͤ��Ƥߤ롣�ܥ���򲡤��ȡ��ܥ���Υ�٥뤬1000����1�ޤǥ�����ȥ����󤷤��塢���̤�ˤʤ뤳�Ȥ�տޤ��Ƥ���褦�˸����롣

<script>
function bad_count(evt){
  var self = evt.target || evt.srcElement;
  for (var count = 1000; count > 0; count--){
    self.value = count;
  }
  self.value="count";
}
</script>
<input type="submit" value="count" onclick="bad_count(event)">

�Ȥ����������Υܥ���ϴ����̤�ư���ʤ�������å����Ƥⲿ�ⵯ���ʤ��褦�ˤ��������ʤ���

����Ϥʤ���?��������̩�����롣

�ؿ��μ¹���ϡ��ڡ����ν񤭴����ϵ�����ʤ������ʤ�����ؿ��μ¹ԥ��塼�����ˤʤäƻ����ǤϤ���ƥڡ����ν񤭴�����������Τ���������嵭����Ǥϡ��ǽ��¹Է�̤Τߤ�ɽ�������Ȥ����櫓����

���ߤΥ֥饦�����μ����ϡ��ʲ��Τ褦�ˤʤäƤ���褦�Ǥ��롣�֤褦�Ǥ���פȤ����Τϡ����ͽ�dz�ǧ�����櫓�ǤϤʤ��������

���٥��ȯ�� �� �ؿ��μ¹� �� �ڡ����κ����� 

�嵭����ǰտޤ����褦�ˡ������󥿡���ư��������ɽ�����������Ȼפä��顢�������ٴؿ��μ¹Ԥ�λ���ʤ���Фʤ�ʤ��������������󥿡���ư�����Ȥ����԰٤��Τ�Τ˴ؿ��μ¹Ԥ�ɬ�פǤ��롣�ɤ�������褤��?

������������setTimeout()�Ȥ����櫓�����嵭����Ǥϡ������󥿡�����ư�������顢���˥����󥿡���ư�����ؿ���setTimeout()����Ͽ���롣����Ȼ�������ʾ���ˤ��δؿ���¹Ԥ���Ȥ������٥�Ȥ�ȯ�������ޤ����δؿ����¹Ԥ��졢�ڡ����������褵��롣

�����ºݤˤ��Ȥɤ��ʤ뤫?�ʲ��Τ褦�ˤʤ롣

<script>
var count;
var timer;
function good_count(evt){
  var self = evt.target || evt.srcElement;
  count = 1000;
  var callback = function(){
    self.value = count--;
    if (count > 0){
       timer = setTimeout(callback, 0);
    }else{
       self.value = "count";
    }
  }
  timer = setTimeout(callback, 0);
}
</script>
<input type="submit" value="count" onclick="good_count(event)">

���٤Ϥ�����ư����������ư���������Τ�䤳�����ϰ��β�����������������������Хå��ؿ���Ȥä����٥�Ƚ����Ȥ����Τϡ�GUI�ץ�����ߥ󥰤�и������ͤǤ���Ф������ٴ������Ĥ����Ȼפ������༡Ū�˽��������ץ�����ष���񤤤����Ȥ��ʤ��ͤˤϡ֥ϥ�?�פ�������������

���������Τ������ǡ��ץ�������ּ¹���פ����Ǥ��뤳�Ȥ��ǽ�ˤʤ롣�ʲ��ϥ����󥿡���ư���Ƥ���֤˥ܥ���򥯥�å�����ȥ�����Ȥ����Ǥ��������

function better_count(evt){
  var self = evt.target || evt.srcElement;
  if (timer){ 
    timer = clearTimeout(timer); // clearTimeout(timer); timer = undefined;
    return;
  }
  if (! count) count = 1000;
  var callback = function(){
    self.value = count--;
    if (count > 0){
       timer = setTimeout(callback, 10);
    }else{
        timer = clearTimeout(timer);
       self.value = "count";
    }
  }
  timer = setTimeout(callback, 10);
}

�ȤϤ��������Τ�����϶ˤ����ľ��Ū�ǡ��Х��β����Ȥ�ʤꤦ�롣�ä˥�����Хå��ؿ���񤯻��ˤϡ��ֽ�λ�׽���������Ȥ��ʤ��ȼ�򷹤���Х���ȯ�����Ȥʤ롣�����θ��clearTimeout()��񤭲ä��Ƥ����ʤ��ȡ��ּ¹Խ�λ�׸�����٥���å����ʤ��Ⱥƥ�����Ȥ��ʤ����ܤˤʤ롣

�ºݡ�Javascript�ˤ����뤳�����������Ȥ����Τϡ���Ϥ�preemptive multitasking�ʴĶ�����Ӥ������ľ�񤭤Ť餤�Ȼפ�����������Unix��sleep()���٤Τ��ȤǤ��ηä�ʤ�ʤ��ƤϤʤ�ʤ������ä���Ȥ��Ƥΰ��ݤǤϡ�OS X�ˤʤ�����System 7�ʹߤ�Mac OS�δ��Ф˻��Ƥ��롣�����Ϥ����cooporative multitasking�ȸƤ�Ǥ��ä��������ǽ�����OS���֤��ʤ��ȡ����ĤޤǤ��äƤ�Ĥ�Υץ��������Ԥ�����뱩�ܤˤʤ����ˤ����ơ����ߤΥ֥饦�����ˤ��ä���ʤΤ���

�֥饦������OS�ˤʤ뤴�����Ǥ��롣������preemptive�ˤʤä��ߤ����Ȼפ��Τϻ�����������������ʤ��Ȥ⡢Unix��fflush()Ū�ʤ�Τ��ߤ������ؿ�����Ǥ⤽���Ƥ֤ȶ���Ū�˥ڡ��������褵���褦�ʴؿ�����window.refresh()���Ȥ���

Dan the Javascripter