代码改变世界

bug笔记之——setTimeout

2012-02-15 16:03  呦菜  阅读(281)  评论(0编辑  收藏  举报

写了这样一段代码:

//应用jquery UI的弹出层
$('#dialog p').html(msg.msg);
$('#dialog').dialog('open');
setTimeout(“$('#dialog').dialog('close');”,2000);
location.reload();

本意是弹出层在两秒后自动关闭,然后再刷新页面,但是结果发现在ie 中根本不弹出就刷新了,产生这一悲剧的是没有了解setTimeout的工作原理

 

    Javascript中的函数调用是通过堆栈实现的。

$('#dialog').dialog('open');

setTimeout(“$('#dialog').dialog('close');”,2000);
location.reload();

在执行这段代码的时候,$('#dialog').dialog('open');先入栈,如果没有setTimeout的话应该是$('#dialog').dialog('close');入栈,最后是location.reload();入栈,但是现在给$('#dialog').dialog('close');加上了setTimeout后,$('#dialog').dialog('close');就被放在一个新的栈中等待,于是就先执行了location.reload();

这就是我的页面还没有弹出层就刷新页面的原因啦~~以后要多加注意!