繁体   English   中英

为什么在我的转换陈述中只有两个案例起作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM