JavaScript先发制人编程?

JavaScript先发制人编程?,javascript,Javascript,我希望得到与以下类似的效果: function modify() { s.innerText='hello'; j=0; for (i=1;i<1000000;i++) j+=i; s.innerText=j; } <span id='s' onClick="modify();">Click</span> 单击对象时,span元素应该说“hello”,循环应该添加1到1000000之间的整数,然后将结果放入span元素中。但是,当我单击“单击”时,它直接进入答案

我希望得到与以下类似的效果:

function modify() {
s.innerText='hello';
j=0;
for (i=1;i<1000000;i++) j+=i;
s.innerText=j;
}

<span id='s' onClick="modify();">Click</span>
单击对象时,span元素应该说“hello”,循环应该添加1到1000000之间的整数,然后将结果放入span元素中。但是,当我单击“单击”时,它直接进入答案,而不显示“hello”。

如果您想等待一段时间,请使用窗口对象的setTimeout函数

function modify() {
    s.textContent = 'hello';
    setTimeout( function () {
        s.textContent = 'goodbye';
    }, 1000);
}

这将在更改文本前等待第二个1000毫秒。我还将IE特定的innerText更改为标准的textContent属性

计算机的计算速度可以达到1000000。setTimeout将是您的朋友。那么,如果您想更改颜色,为什么要显示文本更改?@j08691我想在这种情况下,它不会做任何正确的事情?编译器优化您可能忘记了循环体,但答案是正确的:浏览器在javascript完成之前不会呈现任何内容。因此,如果您在一行中有几个DOM更改,您将只看到最后一个。这个想法并不是什么都不做——即使您正在做有目的的事情,代码也不会显示hello。我不知道在“开始”和“停止”阶段之间的执行时间有多长。无论如何,这是一个很好的解决方案。是的,@georg的评论中提到了这个问题。这个方法是有效的,因为我们实际上在调用setTimeout并且更新DOM时离开了这个函数。