不,beginPath 和 closePath 不是必需的。
画布上下文具有当前路径。您可以使用 moveTo 和 lineTo 等方法向该路径添加指令。完成路径构建后,可以使用stroke 和fill 等方法,使用当前路径在画布上进行绘制。
closePath 只是您可以添加的另一条指令。使用fill 时你可能不会注意到它的效果,但使用stroke 时,它会(本质上)回到起始位置,“关闭”路径。比较和对比:
ctx.moveTo(10, 10); ctx.moveTo(10, 10);
ctx.lineTo(90, 10); ctx.lineTo(90, 10);
ctx.lineTo(90, 90); ctx.lineTo(90, 90);
ctx.closePath();
ctx.stroke(); ctx.stroke();
另一方面,beginPath 会丢弃以前的路径并让您开始新的路径。没有它,您将越来越多地附加到先前的路径,这可能是不可取的。比较和对比:
ctx.moveTo(10, 10); ctx.moveTo(10, 10);
ctx.lineTo(90, 10); ctx.lineTo(90, 10);
ctx.lineWidth = 4; ctx.lineWidth = 4;
ctx.strokeStyle = "red"; ctx.strokeStyle = "red";
ctx.stroke(); ctx.stroke();
ctx.beginPath();
ctx.moveTo(10, 20); ctx.moveTo(10, 20);
ctx.lineTo(90, 20); ctx.lineTo(90, 20);
ctx.lineWidth = 2; ctx.lineWidth = 2;
ctx.strokeStyle = "blue"; ctx.strokeStyle = "blue";
ctx.stroke(); ctx.stroke();