当我运行此代码时,它始终会一直持续到“Quadrat”。 “Überraschung”也很完美。 “Kreis”和“Dreieck”没有。我真的不知道为什么会这样。你能明白为什么吗?
case 'Kreis':
function draw() {
ellipse(56, 46, 55, 55);}
break;
case 'Dreieck':
function draw() {
triangle(30, 75, 58, 20, 86, 75);}
break;
case 'Quadrat':
function draw() {
rect(30, 20, 55, 55);}
break;
case 'Überraschung':
var rN = Math.floor(Math.random() * 3);
if (rN === 0) {
function draw() {
line(30, 20, 85, 75);}}
else if (rN === 1) {
function draw () {
quad(38, 31, 86, 20, 69, 63, 30, 76);}}
if (rN === 2) {
function draw () {
arc(50, 50, 80, 80, 0, PI + QUARTER_PI);}}
break;
default:
alert('Hast du was geschrieben, was ich verstehe?');
break;}
感谢您的时间!
答案 0 :(得分:1)
function
声明悬挂,函数的条件声明不是一件事:
if (true) {
function foo() { console.log('foo'); }
} else {
function foo() { console.log('bar'); }
}
foo();

后者总是有时会覆盖前一个,* if
甚至在函数被提升之前都没有被评估过。
*看起来不同的浏览器在此处表现不同。基本上它是未定义的,哪个声明将是规范的。
如果您希望符号draw
动态地采用不同的值,则不能使用函数声明,但必须使用值赋值:
var draw;
switch (...) {
...
draw = function () { ... };
}
在这里你可以做一些函数式编程:
draw = ellipse.bind(null, 56, 46, 55, 55);
答案 1 :(得分:0)
您需要将其更改为单个绘图功能,然后在其中切换:
function draw() {
switch (what) {
case 'Kreis':
ellipse(56, 46, 55, 55);
break;
case 'Dreieck':
triangle(30, 75, 58, 20, 86, 75);
break;
case 'Quadrat':
rect(30, 20, 55, 55);
break;
case 'Überraschung':
var rN = Math.floor(Math.random() * 3);
if (rN === 0) {
line(30, 20, 85, 75);
} else if (rN === 1) {
quad(38, 31, 86, 20, 69, 63, 30, 76);
}
if (rN === 2) {
arc(50, 50, 80, 80, 0, PI + QUARTER_PI);
}
break;
default:
alert('Hast du was geschrieben, was ich verstehe?');
}
}