Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript在循环中第二次执行函数时抛出未定义错误_Javascript_Jquery_Html_Canvas - Fatal编程技术网

Javascript在循环中第二次执行函数时抛出未定义错误

Javascript在循环中第二次执行函数时抛出未定义错误,javascript,jquery,html,canvas,Javascript,Jquery,Html,Canvas,我正在用JS和jQuery在画布上绘制形状。我有一个渲染循环函数,它使用来自对象的信息重新绘制形状。这个对象已经定义,代码在循环中运行了一次,然后这个对象就没有定义,我不知道为什么了。我不怎么做JS,所以我不确定我是否遗漏了一些明显的东西。我已经检查了其他线程的负载,但似乎找不到为什么我的值在定义后会变为未定义状态。以下是代码的简化版本: $document.ready{ const canvas = $canvas; const context = canvas.getCon

我正在用JS和jQuery在画布上绘制形状。我有一个渲染循环函数,它使用来自对象的信息重新绘制形状。这个对象已经定义,代码在循环中运行了一次,然后这个对象就没有定义,我不知道为什么了。我不怎么做JS,所以我不确定我是否遗漏了一些明显的东西。我已经检查了其他线程的负载,但似乎找不到为什么我的值在定义后会变为未定义状态。以下是代码的简化版本:

$document.ready{

    const canvas = $canvas;
    const context = canvas.getContext();

    const 2dArray = [ [...], ..., [...] ];
    const object = { coords: {x:5, y:5}, shape: 2dArray};
    render(canvas, context, object);
});

function render(canvas, context, object){
    drawFunction(canvas, context, object);
    requestAnimationFrame(render);
};

function drawFunction(canvas, context , object){
    drawShape(context, object.coords, object.shape);
};
快速简化演练:

drawShape:迭代二维数组,从3x3的正方形网格形成形状。 drawFunction:执行drawShape和其他一些位。 render:递归函数,用于连续绘制和重画画布。 现在发生的情况是,drawFunction在渲染循环中执行一次,然后在第二次执行和第二次执行drawShape时,对象现在变得未定义。我不理解这一点,因为它已经被定义和使用了?该形状只绘制了一次,但随后出现了一些问题

感谢您的帮助,请告诉我,我是个白痴,错过了一些愚蠢而简单的东西。

requestAnimationFrame调用给定函数时没有任何参数。所以渲染函数在第二次执行时不会接收任何参数。要解决此问题,可以使用绑定函数上的参数

函数rendercanvas、上下文、对象{ 绘图功能画布、上下文、对象; requestAnimationFramerender.bindnull、画布、上下文、对象; }
太好了,非常感谢!我不习惯Js语法,因为我主要使用C++/C等,所以我怀疑我是否能解决这个问题。谢谢