这是我关于StackOverflow的第一个问题,请原谅协议中的任何违规行为。
我在大学的计算机图形课上学习WebGL。在学习在屏幕上旋转正方形时,我的同学和我注意到渲染功能中的以下代码:
function render()
{
gl.clear(gl.COLOR_BUFFER_BIT);
theta += 0.1;
gl.uniform1f(thetaLoc, theta);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
render();
}
我们不明白,而且我们的教授无法给出足够的答案,这就是为什么这段代码不会导致堆栈溢出,因为它会递归调用自身。我们运行代码,它不会导致任何问题,但我们不明白为什么。
我们无法在教科书或网上找到答案。如果有人能解释,我会把它传递给我的同学。提前谢谢。
答案 0 :(得分:3)
这确实会导致堆栈溢出。当我运行它时,我得到了
Uncaught RangeError: Maximum call stack size exceeded
我想你可能会看到像这样的代码
function render() {
...
requestAnimationFrame(render);
}
render();
在这种情况下,它不是递归的。渲染功能正在请求动画帧然后退出。然后浏览器再次呈现它调用render
的下一帧。