1

我正在尝试将二维数组传递给 JavaScript 函数,但我只得到二维数组的第一个元素。以下是我的代码的摘录:

header = [['Objective','summary'],['Status','txtHealth']];

...


function setTableHeader(data){
    console.log(data);
    var table = document.getElementById('tblData').tHead.insertRow(0);

    for (var i = 0; i < header.length; i++)
        table.insertCell(i).innerHTML = data[i];

};


/*calling the function*/
setTableHeader.apply(this,header);

控制台日志仅显示 ['Objective','summary'],是因为该函数仅传递了指向数组第一个内存块的内存位置的指针吗?

我是 webdev 的新手,我也很好奇我是否应该尽可能使用全局变量而不是局部变量?

4

3 回答 3

3

第一个问题是你使用applywhich 参数作为数组所以你应该这样做。

setTableHeader.apply(this,[header]);

否则,您的标头数组的每一行将作为函数自己的参数进入。所以你的数据将只是['Objective','summary']

但是您可以在这里调用该函数:

  setTableHeader(header);

此外,如果您将标头定义为全局,则无需将数据作为参数传递给函数。但是,您的 for 循环检查header数组的长度而不是传入的data长度。由于这个apply问题,这里不匹配。

于 2013-09-23T00:26:35.447 回答
1

for循环应该循环直到,而data.length不是header.length

于 2013-09-23T00:26:08.357 回答
0

javascript 中的函数参数作为值或引用传递。

原始类型,如 int、string 作为值传递。

对象类型,如数组、对象作为引用传递。

在你的情况下,apply这里是魔鬼。apply接受一个参数数组并将它们作为位置参数应用于函数,这意味着标题数组得到了扩展。因此,如果您想让标题正确,请执行以下操作:

setTableHeader.apply(this,[header]);
于 2013-09-23T00:44:22.603 回答