为什么警报框返回“undefined undefined”?

时间:2014-08-14 01:24:07

标签: javascript return

我正在尝试警告下面循环的每个条件中的值(在函数returnFunction中)。我有一个函数myFunction,结构如下:

var myFunction = function () {
    window.myArray = {
        1: returnFunction("a"),
        2: returnFunction("b"),
        3: returnFunction("c"),
        4: returnFunction("d"),
        5: returnFunction("e"),
        6: returnFunction("f"),
        7: returnFunction("g")
    }
}

returnFunction看起来像这样:

var returnFunction = function (classID) {
    var myArray = [], tempcounter = 0;

    tempcounter = document.getElementsByClassName(classID).length;

    myArray = {classID : tempcounter};

    return alert(myArray[0] + ' ' + myArray[1]); 

}

提醒的返回值是 undefined undefined

我的理解是这里的流程是当调用myFunction时,它调用returnFunction 7次,每次发送一个代表DOM中特定类的不同字符串(“a”到“g”)。对于给定的类“a”到“g”,然后计算类(classID)的实例数,并返回classID和一个数字,该数字应该在警报中返回。

谁能告诉我这里哪里出错?

3 个答案:

答案 0 :(得分:0)

在returnFunction中,更改

myArray = { classID : tempcounter};
return alert(myArray[0] + ' ' + myArray[1]);

myArray[classID]  = tempcounter;
return alert(classID + ' ' + myArray[classID]);

答案 1 :(得分:0)

这段代码很乱,所以我会尝试清理它。

假设此函数的要点是捕获页面上所有对象的当前长度,这一点更清楚:

var classArr = ['a','b','c','d','e','f','g'],
    lengthObj = {},
    getLength = function(classID){
        return document.getElementsByClassname(classID).length;
    },
    lengthFunc = function(){
        for(var i = classArr.length; i--;){
            lengthObj[i+1] = {
                classArr[i]:getLength(classArr[i])
            };
        }
    }

lengthFunc();

执行以下操作:

  • 构建您拥有的classID数组
  • 创建窗口级空对象
  • 创建方法以返回特定classID的项目数
  • 创建方法,将从getLength方法检索到的每个长度分配给其相应的classID

顺便说一下,将alert返回给一个对象(或数组,或者一个)的值是没有意义的,但是分配classID:length的对象更有意义。每个值。最后要注意的是,我会使lengthFunc 0索引而不是1索引,但我保持它与你的相同,因此[i+1]

答案 2 :(得分:0)

你写了

myArray = { classID: tempCounter}

特别是你创建了一个对象,而不是一个数组,只有一个键,键是classID。此对象没有键0,也没有键1。因此,myArray['classID']将被定义,但myArray[0]将不会。注意对象

foo = { '0': tempCounter }

将定义为foo[0]。与创建数组相比,这就是创建一个带键作为数字的对象。

您应该使用数组而不是对象,或者在访问对象时访问对象,而不是访问数组。