Javascript 无法解释的未捕获类型错误:未定义不是函数

Javascript 无法解释的未捕获类型错误:未定义不是函数,javascript,undefined,Javascript,Undefined,我在Chrome上运行以下代码时遇到了这个错误:UncaughtTypeError:undefined不是一个函数,在这行它是作为注释编写的。我已经在互联网上寻找类似的问题好几天了,但我的问题没有得到解决。下面是JS代码: var myArr = []; function loadExams() { var token = getCookie("token"); var avgArr = []; var avgZero = { sAvg: 0,

我在Chrome上运行以下代码时遇到了这个错误:UncaughtTypeError:undefined不是一个函数,在这行它是作为注释编写的。我已经在互联网上寻找类似的问题好几天了,但我的问题没有得到解决。下面是JS代码:

var myArr = [];
function loadExams() {
    var token = getCookie("token");
    var avgArr = [];
    var avgZero = {
        sAvg: 0,
        sCfu: 0,
        uDate: ""
    };

    dataIn = {
        "action": "loadExams",
        "token": token
    };
    ajaxPost(dataIn, "localPHP.php", function(dataOut) {
            for (var i = 0; i < dataOut.length; i++) {
                $("#editPick").append("<option value=" + dataOut[i]['n'] + ">" + dataOut[i]['sub'] + ": " + dataOut[i]['mark'] + " (" + dataOut[i]['date'] + ")" + "</option>");
                if (i === 0) {
                    console.log(avgArr); //ok
                    console.log(dataOut[0]); //ok
                    console.log(avgZero); //ok
                    avgArr[0] = avg(dataOut[0], avgZero); //HERE ERROR >>>>>>>>>>>>>>> Uncaught TypeError: undefined is not a function <<<<<<<<<<<<<<<<<<<
                } else {
                    avgArr[i] = avg(dataOut[i], avgArr[i - 1]); // same error here!
                }
            }
            for (i = 0; i < myArr.length; i++) {
            avg += myArr[i].mark * myArr[i].cfu;
            cfu += myArr[i].cfu * 1;
        }
        i = dataOut.length - 1;
        var avg = avgArr[i].sAvg / avgArr[i].sCfu;
        document.getElementById('avg').innerHTML = Math.round(avg * 100) / 100;;
    });
}

function avg(cur, prev) {
    var avgTmp = {
        sAvg: prev.sAvg,
        sCfu: prev.sCfu,
            uDate: cur.date
    };
    if (cur.type === "full") {
        avgTmp.sAvg += cur.mark * cur.cfu;
            avgTmp.sCfu += cur.cfu * 1;
    } else {
        for (var j = 0; j < myArr.length; j++) {
            console.log(i + " " + cur.sub + " <> " + j + " " + myArr[j].sub);
            if (myArr[j].sub === cur.sub) {
                avg += (myArr[j].mark + cur.mark) / 2 * cur.cfu;
                cfu += cur.cfu * 1;
                myArr.splice(j, 1);
                var flag = true;
                break;
            }
            if (!flag) {
                j = myArr.length;
                var tmp = {};
                tmp.sub = cur.sub;
                tmp.mark = cur.mark;
                tmp.cfu = cur.cfu;
                myArr[j] = tmp;
            }
        }
    }
    console.log(avgTmp);
    return avgTmp;
}
function ajaxPost(data, php, callback) {
    ax = $.ajax({
        type: "POST",
        data: data,
        url: php,
        success: function (raw_data) {
            f = $.parseJSON(raw_data);
            callback(f);
        },
        error: function (xhr, desc, err) {
            console.log("xhr: " + xhr + "\nAjax error. Details: " + desc + ", Error:" + err);
        }
    });
}
var myArr=[];
函数loadtests(){
var token=getCookie(“token”);
var-avgArr=[];
var avgZero={
sAvg:0,
sCfu:0,
乌达特:“
};
数据输入={
“操作”:“加载测试”,
“代币”:代币
};
ajaxPost(数据输入,“localPHP.php”,函数(数据输出){
对于(var i=0;iavgArr[0]=avg(dataOut[0],avgZero);//此处错误>>>>>>>>>>>>>>>>>>>>>未捕获类型错误:未定义不是一个函数我认为这是因为在函数
loadexamies
中有一个语句

 var avg = avgArr[i].sAvg / avgArr[i].sCfu;
这将影响你的函数定义(因为它在一个更内部的范围内)。重命名为变量为其他(或函数)


作为一种最佳实践,在作用域的顶部定义变量,这样更容易跟踪。

下面是一个复制该问题的最简单示例:
function bar(){};function foo(){bar();var bar;}
。这是一个愚蠢的错误吗?非常抱歉!感谢您宝贵的帮助!以及您的建议