函数不允许未定义的参数

时间:2014-04-16 15:28:37

标签: javascript csv callback

我试图获取一个接收数组" XY"的函数。 JS抛出一个错误,说我无法索引变量。但这似乎很疯狂,因为它只是加载一个函数 - 当然阵列还没有被定义!我错过了什么?

function reformat(XY) {
    "use strict";

var exper = [];
    exper.X = [];
    exper.Y = [];

    for(var i=0;i<XY.length;i++){ // here, throws error "Uncaught TypeError: Cannot read property 'length' of undefined "
        exper.X[i] = XY[i][0];
        exper.Y[i] = XY[i][1];
    }

}; // END reformat

函数在加载数据后用作回调:

    <script type="text/javascript">
        loadXY("XY.csv", reformat);
    </script>


function loadXY(fname,callback){
    d3.csv(fname, function(data) {
        var XY = data.map(function(d) { return [ Number(d["X"]), Number(d["Y"])]; });
    });
    callback(XY);
}

编辑:在有帮助的情况下添加html上下文:

<!doctype html>

<html>
<head>
    <title>Experiment</title>
    <meta charset="utf-8">
    <script src="easeljs-min.js" type="text/javascript"> </script>
    <script src="numeric-min.js" type="text/javascript"> </script>
    <script src="jquery-min.js" type="text/javascript"> </script>
    <script src="jquery.csv-0.71.min.js" type="text/javascript"> </script>

    <script src="d3.min.js" type="text/javascript"> </script>
    <script src="reformat.js" type="text/javascript"> </script>
    <script src="loadXY.js" type="text/javascript"> </script>

    <link rel=stylesheet href="task.css" type="text/css" media="screen">

</head>

<body>
    <script type="text/javascript">
        loadXY("XY.csv", reformat);
    </script>

    <canvas id="easel" width="640" height="480"> Stop Using IE! </canvas>

</body>

1 个答案:

答案 0 :(得分:0)

您正在上一个循环内部初始化XY。你需要将callback(XY);移动到它上面的函数中,如下所示:

function loadXY(fname,callback){
    d3.csv(fname, function(data) {
        var XY = data.map(function(d) { return [ Number(d["X"]), Number(d["Y"])]; });
        callback(XY);
    });

}