在JavaScript中调用函数时出现“不是函数”的错误

4

我正在上我的第二门JavaScript课程,我们还没有学习调试工具,我只能查看浏览器抛出的错误。下面是我写的代码(其中包括数据验证):

/**
* displayFunction gets info from form and displays message on screen
* it also called all the validation functions for the form
*/

function displayInfo() {
    //declare variables and initialize them.
    var fullName = document.myForm.fullName.value;
    var int1 = parseInt(document.forms["myForm"]["int1"].value);
    var int2 = parseInt(document.myForm.int2.value);
    var num3 = parseInt(document.myForm.num3.value);
    var num4 = parseInt(document.myForm.num4.value);
    var num5 = parseInt(document.myForm.num5.value);

    //make sure variable flag = 0
    flag = 0;
    //call the Validation functions
    nameValidate(fullName);
    int1Validate(int1);
    int2Validate(int2);
    num3Validate(num3);
    num4Validate(num4);
    num5Validate(num5);

    //call tha functions to find largest and smallest numbers and the sum
    var largest = largest(int1, int2, num3, num4, num5);
    var smallest = smallest(int1, int2, num3, num4, num5);
    var sum = sum(int1, int2, num3, num4, num5);

    //Display the outpu t it everything is entered right.
    if (flag == 1) {
        return false;
    } else {
        document.getElementById("message").innerHTML = "Hello, " + fullName + ". You entered: " + int1 + ", " + int2 + ", " + num3 +
        ", " + num4 + ", " + num5 + ". The largest number entered was " + largest + ". The smallest number you entered was " + smallest + 
        ". And the sum of all of the numbers was " + sum + ".";
    }
}

我正在尝试从一个表单中获取数字,然后找到最大的数字、最小的数字和它们的和。我已经为这些创建了单独的函数,并在上面的代码中调用了它们,但显然我漏掉了一些重要的东西,因为浏览器窗口中的检查出现了错误,指出"largest"、"smallest"和"sum"不是函数。它们都在代码中。我在忍受过敏性头痛的情况下尝试做这个,可能漏掉了一些很小的东西,希望有人能发现我少写了什么。
以下是最大值函数,其他两个函数基本相同:
/**
* largest takes in the numbers and returns the largest number
* @params - 5 ints
* @return - largest number
*/

//declare function largest and take in int1, int2, num3, num4, and num5
function largest (n1, n2, n3, n4, n5) {
    //declare variable largest and use Math.max to find the largest number
    var largest = Math.max(n1, n2, n3, n4, n5);

    return largest;
}

你能给我们展示一下错误信息吗?这有助于找到解决方案^^ - Gorgamite
我本以为只需调用函数并使用返回的内容作为文本输出,但显示的是完整的函数而非结果。 - Lisa
assignment2.js:31 未捕获的类型错误:largest不是一个函数 在displayInfo(assignment2.js:31)处 在HTMLInputElement.onclick(dataValidation.html:31)处 - Lisa
1个回答

3
问题在于你使用了与你调用的函数相同的变量名来存储结果。var会被提升到函数顶部,因此对解释器来说,你的代码实际上看起来像这样:
function displayInfo() {
  var largest;
  var smallest;
  var sum;
  // ...
  largest = largest(int1, int2, num3, num4, num5);
  smallest = smallest(int1, int2, num3, num4, num5);
  sum = sum(int1, int2, num3, num4, num5);

解释器会认为您指的是最接近当前作用域的变量largest - 在这种情况下,是一个尚未定义的名为largest的变量。例如:

function largest() {
}
function doSomething() {
  console.log(typeof largest);
  var largest = largest();
}
doSomething();

请使用不同的变量名来表示你的结果:
var largestResult = largest(int1, int2, num3, num4, num5);
var smallestResult = smallest(int1, int2, num3, num4, num5);
var sumResult = sum(int1, int2, num3, num4, num5);

谢谢,头疼和鼻塞让我很难思考。 - Lisa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接