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