【问题标题】:Why is this code evaluated to undefined?为什么这段代码被评估为未定义?
【发布时间】:2014-02-09 05:26:37
【问题描述】:

我正在尝试打印包含两个变量的数组,但它一直在记录“未定义” 我做错了什么?

var firstNum = 1
var secondNum = 2
var list = []
var i;
    function calculate(firstNum,secondNum) {
        for( var i = firstNum; i <= secondNum; i++){
            list.push(i);

        }
        console.log(list);
};

函数在表单标签中调用:

<form name="myForm" id="eForm" onsubmit = "calculate()">

这是一个带有表单和js的JS Bin:http://jsbin.com/EcOtUJIx/1/

【问题讨论】:

  • 你实际上在哪里/如何打电话 calculate()?
  • 变量和函数声明都计算为undefined(无论如何都不能用作右值),所以你去吧。
  • @Dagg:您的评论与该问题有何关联? OP 尝试记录 list 而不是变量声明或函数定义。而且他也没有尝试将它们用作右值。
  • 你正在调用没有参数的函数。
  • @FelixKling,他问为什么代码评估为未定义;原因是因为该代码中没有任何语句可以计算任何内容。如果它包含一个确实评估为某事的语句,则整个程序将评估为最后一个语句评估为的任何内容。

标签: javascript for-loop


【解决方案1】:

在定义后调用函数:

calculate(firstNum, secondNum); // works as calculate(1, 2);

然后它将在控制台中显示数组

【讨论】:

  • 我认为你是对的,但调用可能应该是calculate(firstNum, secondNum) 以使用全局变量。或者可以完全省略函数声明中的形参,直接使用全局变量。
  • 哦,调用只需要在变量声明之后,可以在函数声明之前。
【解决方案2】:

根据您的评论和更新的问题,您正在从表单的内联事件处理程序调用该函数:

onsubmit = "calculate()"

您不向函数传递任何参数,这意味着在函数内firstNumsecondNum 都是undefined。我认为您将它们与同名的全局变量混淆了。

如果您更改了函数声明以删除参数:

function calculate() {

...然后在函数内引用firstNumsecondNum 时,它将使用全局变量。 (或者您可以更改参数名称,但由于您实际上并未传递任何参数,因此删除它们更有意义。)

演示:http://jsfiddle.net/5WBB5/

请注意,通常的做法是声明仅在函数内部该函数中使用的变量:

   function calculate() {
       var firstNum = 1;
       var secondNum = 2;
       var list = [];
       for (var i = firstNum; i <= secondNum; i++) {
           list.push(i);
       }
       console.log(list);
   };

(注意输出相同:http://jsfiddle.net/5WBB5/1/

如果您需要函数使用不同的函数,那么您可以像在代码中一样声明参数,但在调用函数时传递值:

function calculate(firstNum, secondNum) {
    // your code here
}

calculate(1, 2);

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2011-09-06
    • 2021-03-29
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多