当我运行这段代码时,它总是会失败,直到“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
。
* 看起来不同的浏览器在这里表现不同。本质上,哪个声明将是规范声明是未定义的。
如果您希望符号 draw
动态地采用不同的值,则不能使用函数声明,而必须使用赋值:
var draw;
switch (...) {
...
draw = function () { ... };
}
在这里您可以像这样进行一些函数式编程:
draw = ellipse.bind(null, 56, 46, 55, 55);
关于javascript - 为什么我的 switch 语句中只有两种情况有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49811106/