首页 > 解决方案 > 为什么这个简单的 JavaScript 程序不起作用?

问题描述

我试图从用户输入的数字数组中显示最小值、最大值和平均值。

浏览器的控制台告诉我 min() 和 max() 不是函数
显示错误:

未捕获的类型错误:max 不是
HTMLInputElement.onclick (numbers.html:7)
onclick @ numbers.html:7处的函数

只有平均功能有效,其他功能无效......为什么?

var i;
var num = new Array();
window.alert("enter 10 numbers:");
for (i = 0; i < 10; i++) {
  num[i] = parseInt(prompt("num"));
}

function max() {
  var max = num[0];
  for (i = 0; i < 10; i++) {
    if (max < num[i]) {
      max = num[i];
    }
  }
  window.alert("the max is: " + max);
}

function min() {
  var min = num[0];
  for (i = 0; i < 10; i++) {
    if (min > num[i]) {
      min = num[i];
    }
  }
  window.alert("the min is: " + min);
}

function mean() {
  var mean = 0;
  for (i = 0; i < 10; i++) {
    mean += num[i];
  }
  mean = mean / 10;
  window.alert("mean : " + mean);
}
<!DOCTYPE html>
<html>

<head>
  <title>Numbers</title>
</head>

<body>
  <input type="button" value="max" onclick="max()"><br>
  <input type="button" value="min" onclick="min()"><br>
  <input type="button" value="mean" onclick="mean()"><br>
  <script src="numbers.js"></script>
</body>

</html>

标签: javascripthtml

解决方案


尝试以不同的方式调用函数,例如,您可以调用 max 函数,并确保在 html onclick 处理程序中将其更改为最大值。当你用“var”声明一个变量时,它是全局声明的(你应该避免这样做并改用 let 和 const 的一个很好的理由)。您的代码应如下所示:

var i;
var num = new Array();
window.alert('enter 10 numbers:');
for (i = 0; i < 10; i++) {
    num[i] = parseInt(prompt('num'));
}
var max;
var min;
function maximum() {
    max = num[0];
    for (i = 0; i < 10; i++) {
        if (max < num[i]) {
            max = num[i];
        }
    }
    window.alert('the max is: ' + max);
}

function minimum() {
    min = num[0];
    for (i = 0; i < 10; i++) {
        if (min > num[i]) {
            min = num[i];
        }
    }
    window.alert('the min is: ' + min);
}

function mean() {
    var m = (max + min) / 2;
    window.alert('mean : ' + m);
}

你的html:

 <input type="button" value="max" onclick="maximum()"><br>
 <input type="button" value="min" onclick="minimum()"><br>
 <input type="button" value="mean" onclick="mean()"><br>

推荐阅读