Javascript 功能赢得';不允许未定义的参数

Javascript 功能赢得';不允许未定义的参数,javascript,csv,callback,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 Type

我正在尝试获取一个数组“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
函数重新格式化(XY){
“严格使用”;
var exper=[];
exper.X=[];
经验Y=[];

对于(var i=0;i您正在上一个循环中初始化XY。您需要将
回调(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);
    });

}

我们有一个赢家!你刚刚结束了这么多小时的挫折-非常感谢。一般来说,回调为什么不能工作,只要它在以回调为参数的函数中?回调正在工作。问题是,当XY作为参数提供时,XY不在其作用域内。将其移动到与XY all相同的块中它应该“看到”XY并使用它。如果您只是尝试执行
XY.toString()
,它会给出相同的错误。
<!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>
function loadXY(fname,callback){
    d3.csv(fname, function(data) {
        var XY = data.map(function(d) { return [ Number(d["X"]), Number(d["Y"])]; });
        callback(XY);
    });

}