【问题标题】:Why doesn't this simple JavaScript program work? [duplicate]为什么这个简单的 JavaScript 程序不起作用? [复制]
【发布时间】:2021-05-10 22:26:47
【问题描述】:

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

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

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

只有 mean 函数起作用,其他的不起作用……为什么??

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>

【问题讨论】:

  • Uncaught TypeError: lang is not a function 的副本。像onclick 这样的内联事件处理程序是not recommended。它们是一种obsolete, hard-to-maintain and unintuitive 注册事件的方式。总是use addEventListener。这也是原因之一。
  • minmax 分别指的是 字符串 HTMLInputElement.prototype.minHTMLInputElement.prototype.max
  • 这不是您问题的答案,但值得一提的是,在您使用var 的任何地方,您都应该使用let。我会让你跑到兔子洞里找出原因。
  • @SebastianSimon 谢谢你的解释,但同时它有点令人困惑......它将像 max() 这样的函数视为 input 。刹车不是意味着什么吗?
  • @LeonardoT。这很令人困惑,因为您使用的是旧版 DOM 0 事件而不是现代事件侦听器。括号试图将值作为函数调用;他们不会将值转换为函数,也不会“选择”名为“max”或“min”的函数 — minmax 不会引用 onclick 中的任何函数。

标签: javascript html


【解决方案1】:

尝试以不同的方式调用您的函数,例如,您可以改为调用 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>

【讨论】:

    【解决方案2】:

    Min 和 max 是保留名称将函数的名称更改为 _min _max

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2018-07-17
      • 2011-10-25
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多