未捕获的引用错误:未定义绘制
Uncaught Reference Error: draw is not defined
我正在尝试完成本教程,介绍如何使用 JavaScript 和 HTML5 制作井字游戏。
我已经多次遵循了视频中的每个步骤。虽然我的代码似乎与视频中的代码匹配,但我不断遇到错误:未捕获的引用错误:未定义绘制。错误发生在第 12 行。
我一定忽略了什么。谁能指出来?
<!DOCTYPE html>
<html>
<head>
<title>Tic Tac Toe!</title>
<script type="text/javascript">
var c, canvas;
var turn = 1;
window.onload = function() {
canvas = document.getElementById("canvas");
c = canvas.getContext("2d");
draw();
}
var moves = [];
window.onclick = function(e) {
if(e.pageX < 500 && e.pageY < 500) {
var cX = Math.floor(e.pageX / (500 / 3));
var cY = Math.floor(e.pageY / (500 / 3));
var alreadyClicked = false;
for(i in moves) {
if(moves[i][0] == cX && moves[i][1] == cY) {
alreadyClicked = true;
}
}
if(alreadyClicked == false) {
moves[(moves.length)] = [cX, cY, turn];
turn = turn * -1;
draw();
}
}
var bg = new Image();
var x = new Image();
var o = new Image();
bg.src = "ttt_board.png";
x.src = "ttt_x.png";
o.src = "ttt_o.png";
function draw() {
c.clearRect(0, 0, 500, 500);
c.drawImage(bg, 0, 0);
for(i in moves) {
if(moves[i][2] == 1) {
c.drawImage(x, Math.floor(moves[i][0] * (500 / 3) + 10), Math.floor(moves[i][1](500 / 3) + 10))
} else {
c.drawImage(o, Math.floor(moves[i][0] * (500 / 3) + 10), Math.floor(moves[i][1] * (500 / 3) + 10));
}
}
}
};
</script>
</head>
<body>
<canvas id="canvas" width="500px" height="500px"></canvas>
</body>
</html>
问题是draw
是在 window.onclick
中定义的,但您正在尝试从 window.onload
调用它。您确定在定义draw
之前没有缺少右括号吗?
尝试将draw()
函数移出window.click
函数。
window.onclick = function(e) {
// ...
};
function draw() {
// ...
}
严格处理缩进的主要好处之一是您可以非常快速地发现这些错误。
window.click = function(e) {
// ...
function draw() {
// ...
}
};
是您拥有的代码。
由于绘制位于 window.onclick 匿名函数内部,因此它的作用域在那里。由于 window.onload 不共享该匿名函数的作用域,因此您无法从 window.onload 访问 draw。您应该从 window.onclick 事件中删除 draw 函数,以便可以从其他范围调用它。
function draw(){}
window.onload = function(){ /*code*/ };
window.onclick = function(){ /* code */ };
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 如何消除代码中的未定义和其他问题
- 未捕获的ReferenceError:$未定义
- this.router在AngularJS 2中未定义
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 节点fs.stat名称未定义
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- Jquery未定义函数正在停止其他操作
- AngularJS指令出错-无法读取属性'编译'的未定义
- 这.SOMETHING 总是返回未定义的 - extjs
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- 在画布上绘制时,“未捕获的类型错误:无法读取未定义的属性'getContext'”
- 未捕获的引用错误:未定义绘制