浏览 1787 次
锁定老帖子 主题:javascript执行栈,执行顺序
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-07
最后修改:2009-05-07
从网上看到 javascript在函数执行前会将要执行的函数都压入一个栈当中 <script> foo(); function foo(){ setTimeout("alert(1)", 0); alert(2); } </script> 在以上例子中 foo,setTimeout和alert(2)被压入一个栈A当中 "alert(1)"执行语句被压入另一个栈B当中 先栈A或栈B 所以执行的顺序是先输出2在输出1 各位JEers,是这个样子的么? 欢迎大家踊跃发言,哈哈 我开始以为被setTimeout“唤醒”执行的函数有可能会打断正在执行的函数 做了个实验 发现正在执行的函数不会被打断 <script> setTimeout(function(){ for(var i = 0; i < 10000; i++) { } alert("done at\n" + new Date().getTime()); }, 1000); foo(5000); foo2(5000); function foo(offset) { var now = new Date().getTime(); var con = now + offset; while(new Date().getTime() < con) { } document.writeln("foo1<br />" + new Date().getTime() + "<br /><br /><br />"); } function foo2(offset) { var now = new Date().getTime(); var con = now + offset; while(new Date().getTime() < con) { } document.writeln("foo2<br />" + new Date().getTime() + "<br />"); } </script> 以上例子中 即使 function(){ for(var i = 0; i < 10000; i++) { } alert("done at\n" + new Date().getTime()); } 是在setTimeout执行后的1秒被“唤醒” 它也不会打断foo(foo执行过程会花费5秒) 而只是把它放入栈中 以保证它在最快的时间内执行 也就是前面栈都执行完毕之后 想想也符合网上的说法 但心里却还是有些疑问 这个调用栈到底是什么样子的? 上面有错误的话 请大家一定要指出来额 也欢迎大家说说自己的看法 谢谢大家 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |