[英]Why do only two cases in within my switch-statement work?
当我运行此代码时,它始终会一直持续到“ 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;}
感谢您的时间!
function
声明悬挂 ,功能有条件的声明不是一件事:
if (true) { function foo() { console.log('foo'); } } else { function foo() { console.log('bar'); } } foo();
后者有时
总是
会覆盖前者,* if
在提升功能之前甚至没有评估if
。
*看起来不同的浏览器在这里的行为有所不同。 本质上,尚不确定哪个声明将是规范的声明。
如果希望符号draw
动态地采用不同的值,则不能使用函数声明,而必须使用值分配:
var draw;
switch (...) {
...
draw = function () { ... };
}
您可以在此处执行以下功能编程:
draw = ellipse.bind(null, 56, 46, 55, 55);
您需要将其更改为单个绘制函数,然后在其中进行切换:
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?');
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.