Ara*_*and 12 javascript callstack settimeout
通过使用setTimeout方法调用函数而不是直接调用函数,可以在javascript中避免堆栈溢出吗?我对setTimeout的理解是它应该启动一个新的callstack.当我查看chrome和IE的callstack时,似乎setTimeout调用正在等待函数调用返回.
这只是调试器的属性还是我的理解有缺陷?
编辑
虽然下面提供的答案是正确的,但我遇到的实际问题与我调用setTimeout(aFunction(),10)的事实有关,因为括号因此立即评估aFunction.这个问题把我排除在外.
Šim*_*das 17
我可以确认堆栈已清除.
考虑这种情况:
function a() {
b();
}
function b() {
c();
}
function c() {
debugger;
setTimeout( d, 1000 );
}
function d() {
debugger;
}
a();
Run Code Online (Sandbox Code Playgroud)
所以有两个断点 - 一个在函数的开头c,一个在函数的开头d.
在第一个断点处堆叠:
在第二个断点处堆叠:
现场演示: http ://jsfiddle.net/nbf4n/1/
异步调用(例如来自的调用)setTimeout的确会生成新的调用栈。
当您说“当我查看chrome和IE的调用栈时,似乎setTimeout调用正在等待函数调用返回时,您所描述的内容还不清楚。” 但是,您可以做的一件事是将一个断点放在by setTimeout调用的函数中,并查看该调用栈为空。
| 归档时间: |
|
| 查看次数: |
8508 次 |
| 最近记录: |