Javascript二维数组在打印其他数组之前提供未定义的

Javascript二维数组在打印其他数组之前提供未定义的,javascript,html,arrays,Javascript,Html,Arrays,为什么在列表项之前打印未定义的内容。不要在我犯错误的地方。请帮帮我。请考虑下面的代码片段 var播放列表=[ [“野生动物”、“弗洛·里达”], [“翅膀”,“小鸟”], [“纯洁的爱”,“白狮”], [“握住我的手”,“杰西·格林”] ]; var listSongs=“”; 功能打印(msg) { 文件。写(“”+msg+“”); } 函数printSongs(歌曲) { for(var i=0;i

为什么在列表项之前打印未定义的内容。不要在我犯错误的地方。请帮帮我。请考虑

下面的代码片段
var播放列表=[
[“野生动物”、“弗洛·里达”],
[“翅膀”,“小鸟”],
[“纯洁的爱”,“白狮”],
[“握住我的手”,“杰西·格林”]
];
var listSongs=“”;
功能打印(msg)
{
文件。写(“”+msg+“

”); } 函数printSongs(歌曲) { for(var i=0;i”+歌曲[i][0]+“+”,由“+歌曲[i][1]+””; } listSongs+=“”; 印刷(歌曲列表); } var box=document.getElementById(“容器”); document.onLoad(box.innerHTML=打印歌曲(播放列表))
打印和打印歌曲实际上不返回任何内容,因此它们返回未定义的内容

改变

 document.write(...stuff...);


这是因为
printSongs
函数不返回任何特定值。如果未指定返回值,函数将返回未定义的值

当您从
load
事件运行代码时(或至少尝试),不应使用
document.write
。加载页面后,使用
document.write
将隐式调用
window.open
,以便创建一个新页面来替换当前页面

从函数返回HTML代码,而不是将其写出:

var播放列表=[
[“野生动物”、“弗洛·里达”],
[“翅膀”,“小鸟”],
[“纯洁的爱”,“白狮”],
[“握住我的手”,“杰西·格林”]
];
功能打印(msg){
返回“”+msg+”

”; } 函数printSongs(歌曲){ var listSongs=“”;//应该是开始标记,而不是结束标记 for(var i=0;i”+歌曲[i][0]+“+”,由“+歌曲[i][1]+””; } listSongs+=“”; 返回打印(列表歌曲); } //属性名为onload,而不是onload,它位于窗口对象中 //它不是一个函数,你给它分配了一个函数 window.onload=函数(){ //获取加载事件处理程序中的元素 var box=document.getElementById(“容器”); box.innerHTML=打印歌曲(播放列表); };
我认为有几个问题:

  • 首次初始化
    列表歌曲时,需要将其设置为开头标记
    ,而不是结尾标记。所以它应该变成:
    listSongs=
  • 主要问题是
    文档。在
    print
    函数中写入
    。您可能不需要这样做,因为您已经希望将
    box
    元素的
    innerHTML
    设置为由
    printSongs
    可以返回的内容填充
  • 因此,在
    printSongs
    中包含
    return
    语句,以在循环完成后返回所有
    listSongs
片段:

var播放列表=[
[“野生动物”、“弗洛·里达”],
[“翅膀”,“小鸟”],
[“纯洁的爱”,“白狮”],
[“握住我的手”,“杰西·格林”]
];
var listSongs=“”;
函数printSongs(歌曲){
for(var i=0;i”+歌曲[i][0]+“+”,由“+歌曲[i][1]+””;
}
listSongs+=“”;
返回列表歌曲;
}
var box=document.getElementById(“容器”);
box.innerHTML=打印歌曲(播放列表)

难道“listSongs”不应该成为一种音乐吗?(打开标签和不关闭标签)。@Mr.Web打印和打印歌曲是不同的功能。es6也给我们提供了尾部呼叫消除功能,但它并不能满足您的要求thinking@GeorgeSimms对不起,我弄错了。
 return ...stuff...;
print(listSongs);
return print(listSongs);