为什么此代码评估为未定义?

时间:2014-01-20 06:10:18

标签: javascript for-loop

我正在尝试使用其中的两个变量打印数组,但它会保持记录“未定义” 我做错了什么?

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:http://jsbin.com/EcOtUJIx/1/

的JS Bin

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

在定义后调用函数:

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

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