JavaScript方法开始时分配了变量??非常困惑

JavaScript方法开始时分配了变量??非常困惑,javascript,ajax,jquery,highcharts,Javascript,Ajax,Jquery,Highcharts,这是我的第一篇帖子,但我很高兴加入这个社区。我有一个关于JavaScript的问题,对此我完全感到困惑 我正在编写一个JavaScript应用程序,它使用ajax从服务器提取数据并将其添加到图表中。我使用Jquery和Highcharts作为框架,然后围绕Highcharts编写自己的JavaScript“包装器”来生成接口 当processData函数被jSON响应回调时,它以i=1开始,尽管我甚至不应该被初始化或声明。还设置了其他变量。(我通过使用chrome开发者工具进行调试了解到这一点)

这是我的第一篇帖子,但我很高兴加入这个社区。我有一个关于JavaScript的问题,对此我完全感到困惑

我正在编写一个JavaScript应用程序,它使用ajax从服务器提取数据并将其添加到图表中。我使用Jquery和Highcharts作为框架,然后围绕Highcharts编写自己的JavaScript“包装器”来生成接口

当processData函数被jSON响应回调时,它以i=1开始,尽管我甚至不应该被初始化或声明。还设置了其他变量。(我通过使用chrome开发者工具进行调试了解到这一点)。这使得我的循环无法执行,并且我的任何数据都不会添加到图表中

我不知道要显示多少代码,但这些是最相关的部分。如果需要,我可以添加更多

function getData(series, min, max, numpts) {
        if (series === undefined) {
            console.log("error on getData");
            return;
        }

        var request = {};
        request.series = series;

        if (min !== undefined) {
            request.start = min;
        } //in seconds
        if (max !== undefined) {
            request.end = max;
        } 
        if (numpts !== undefined) {
            request.numpts = numpts;
        }
        $.getJSON('/data', request, processData);
        return;
    }

    function processData(data) {
        // handle the data after it comes back from an ajax request
        var curSeries,
            chartSeries,
            curPoint;

        for (var i = 0; i < data.length; i ++) {
            curSeries = data[i];
            chartSeries = chart.get(curSeries.name);

            if (chartSeries === null) {
                //alert("oops");
                chart.addSeries(curSeries);
            } else {
                for (var j = 0; j < curSeries.data.length; j ++) {
                    curPoint = curSeries.data[j];
                    chartSeries.addPoint(curPoint, false);
                }
            }
        }
        chart.redraw();
    }
函数getData(系列、最小值、最大值、numpts){ 如果(系列===未定义){ log(“getData上的错误”); 返回; } var请求={}; request.series=系列; 如果(最小!==未定义){ request.start=min; }//以秒为单位 如果(最大!==未定义){ request.end=max; } 如果(numpts!==未定义){ request.numpts=numpts; } $.getJSON('/data',request,processData); 返回; } 函数processData(数据){ //处理从ajax请求返回的数据 var curSeries, 图表系列, 凝乳点; 对于(变量i=0;i 这两个方法都是我声明的一个叫做graph的类的方法

如果有人有任何想法,谢谢!
-Matt P

我会检查您的数据对象,以确保它符合您的预期,因为即使我预先声明了,该循环也应该可以正常工作:无论如何,您在循环开始时为它指定了0

我能想到的唯一原因是,在定义和初始化之前,如果在代码库中的其他地方没有使用var关键字初始化I,那么我就会被定义和初始化。这样做会将其转储到全局范围(窗口对象),通过关闭代码库中的任何函数使其可用


如果它不在您的某个文件中,则可能在highcharts图形库中(在这种情况下,从所述库中快速运行)。

i
永远不会以1开头。循环不会执行的唯一方法是data.length==0。执行
processData
顶部的
alert(data.length)
并进行检查。jQuery库也可能将变量泄漏到全局范围,尽管通常它的范围非常好。不管怎样,正如你所说,这不重要。Javascript几十年来一直使用大量的全局变量,直到最近范围界定的知识才被广泛传播。所以我一直在使用chromes调试器,我知道它已经初始化了。。。然而,我通过jslint运行了我的代码,并清理了一些东西,主要是空格和遗漏的东西;突然间,它停止了这样做。。。我不知道为什么,因为在这个函数附近没有什么变化。我也认为这可能是chrome的问题。在此之前,我已经在同一个选项卡上运行了一段时间,我可能只是不知何故损坏了控制台:(