Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的switch语句中只有两种情况有效?_Javascript_Switch Statement - Fatal编程技术网

Javascript 为什么我的switch语句中只有两种情况有效?

Javascript 为什么我的switch语句中只有两种情况有效?,javascript,switch-statement,Javascript,Switch Statement,当我运行这段代码时,它总是一直到“Quadrat”为止。“Überraschung”也非常有效。“克雷斯”和“德雷克”没有。我真的不知道为什么会这样。你知道为什么吗 case 'Kreis': function draw() { ellipse(56, 46, 55, 55);} break; case 'Dreieck': function draw() { triangle(30, 75, 58, 20, 86, 75);}

当我运行这段代码时,它总是一直到“Quadrat”为止。“Überraschung”也非常有效。“克雷斯”和“德雷克”没有。我真的不知道为什么会这样。你知道为什么吗

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;}

谢谢你抽出时间

函数
声明被挂起,函数的条件声明不是一件事:

if(真){
函数foo(){console.log('foo');}
}否则{
函数foo(){console.log('bar');}
}

foo()您需要将其更改为单个绘图功能,然后在其中切换:

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?');
  }
}

请添加开关部分和
draw
的调用。不要在
switch
中声明函数,使用函数参数传递想要的操作。该代码段不应该记录
bar
?对我来说是这样的。如果不是这样的话,那就更证明了两次声明同一个函数是完全不可靠的。非常感谢您快速而有用的回答!今天晚些时候我要试试这个!非常感谢你。这似乎很容易,而且确实有效。但唯一的事情是。。。为什么它以这种方式工作而不是另一种方式工作?@Nat_u;正如deceze所说,多次定义一个函数不仅是不好的做法,而且在不同的环境中可能会有不同的工作方式。我的方式是明确的。