【问题标题】:Function not running/being called properly函数未运行/未正确调用
【发布时间】:2017-03-27 06:01:34
【问题描述】:

变量vTotalPayment 不起作用。我认为这是由于我如何调用函数,尽管我无法弄清楚我做错了什么。我知道这也可能是由于误用了 switch 语句。

function begin() {
  var vTicketType = prompt('Please enter the type of ticket');
  var vTicketQty = Number(prompt('Please enter amount required'));

  document.write('Ticket Type: ' + vTicketType + '<br />');
  document.write('Ticket Qty: ' + vTicketQty + '<br />');

  var vTicketPrice = calcPrice(vTicketType);
  var vTotalPayment = calcTotal(vTicketQty, vTicketPrice);

  document.write('Total Payment: ' + vTotalPayment);

}
begin();

function calcPrice(Prices) {
  var Price = 0;
  switch (vTicketType) {
    case 'A':
      Price = 100;
      break;
    case 'B':
      Price = 75;
      break;
    case 'C':
      Price = 50;
      break;
    default:
      Price = -1;
  }
  return (Price);
}


function calcTotal(Payments) {
  var Payment = (vTicketQty * vTicketPrice);
  return (Payment);
}

【问题讨论】:

  • 当您调用函数时,您使用的是 2 个参数,但在您的函数定义中,您只有 1 个参数。可能那是错的。您需要同时使用 vTicketQty 和 vTicketPrice 作为参数。试试看。像这样...... function calcTotal(vTicketQty,vTicketPrice) { var Payment = (vTicketQty * vTicketPrice);退货(付款); }
  • 这是因为,您没有像在函数 calcPrice 中那样声明您正在使用的变量:您将 vTicketType 传递给 switch 语句而不是价格,并且在函数 calcTotal 中您正在使用未定义的变量.
  • 你可以试试这个作为switch的替代品。 JSFiddle。请注意,这是优化。下面的答案指出了问题的实际原因

标签: javascript function switch-statement


【解决方案1】:

您只是将一个参数传递给函数 calcTotal,甚至没有使用它。将您的 calcTotal 替换为以下代码,如果仍然无法正常工作,请在 cmets 中告诉我。

function calcTotal(vTicketQty, vTicketPrice) {
    return (vTicketQty * vTicketPrice);
}

【讨论】:

    【解决方案2】:

    您的方法有错误的参数。参数数量错误,名称错误。

    我认为应该是 calcPrice(vTicketType) 而不是 calcPrice(Prices) 而不是 calcTotal(Payments) 它应该是 calcTotal(vTicketQty, vTicketPrice)

    function begin() {
        var vTicketType = prompt('Please enter the type of ticket');
        var vTicketQty = Number(prompt('Please enter amount required'));
    
        document.write('Ticket Type: ' + vTicketType + '<br />');
        document.write('Ticket Qty: ' + vTicketQty + '<br />');
    
        var vTicketPrice = calcPrice(vTicketType);
        var vTotalPayment = calcTotal(vTicketQty, vTicketPrice);
    
        document.write('Total Payment: ' + vTotalPayment);
    
    }
    begin();
    
    function calcPrice(vTicketType) {
        var Price = 0;
        switch (vTicketType) {
            case 'A':
                Price = 100;
                break;
            case 'B':
                Price = 75;
                break;
            case 'C':
                Price = 50;
                break;
            default:
                Price = -1;
        }
        return (Price);
    }
    
    
    function calcTotal(vTicketQty, vTicketPrice) {
        var Payment = (vTicketQty * vTicketPrice);
        return (Payment);
    }

    【讨论】:

      【解决方案3】:

      您可以执行以下操作:

      (function begin() {
          var vTicketType = prompt('Please enter the type of ticket');
          var vTicketQty = Number(prompt('Please enter amount required'));
      
          document.write('Ticket Type: ' + vTicketType + '<br />');
          document.write('Ticket Qty: ' + vTicketQty + '<br />');
      
          var vTicketPrice = calcPrice(vTicketType);
          var vTotalPayment = calcTotal(vTicketQty, vTicketPrice);
      
          document.write('Total Payment: ' + vTotalPayment);
      
      })();
      
      function calcPrice(vTicketType) {
          var Price = 0;
          switch (vTicketType) {
              case 'A':
                  Price = 100;
                  break;
              case 'B':
                  Price = 75;
                  break;
              case 'C':
                  Price = 50;
                  break;
              default:
                  Price = -1;
          }
          return Price;
      }
      
      
      function calcTotal(vTicketQty, vTicketPrice) {
          var Payment = (vTicketQty * vTicketPrice);
          return Payment;
      }

      为获得最佳实践,您在返回 Payment 或 Return Price 时不需要 () 括号

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 1970-01-01
        • 1970-01-01
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多