在JavaScript中创建的表不';t显示;控制台中没有错误?

在JavaScript中创建的表不';t显示;控制台中没有错误?,javascript,html,Javascript,Html,我正在学习JavaScript,并进入了书中描述创建新DOM元素(如表、行和列)的部分,因此我想创建一个类似元素周期表的表,稍后在学习新事物时可以返回并处理该表。我的问题是,从目前为止我所了解的一切来看,这段代码应该可以工作。除了它没有显示任何内容,FireFox v29.0的控制台中也没有显示任何内容 理想情况下,我希望创建7行(周期)和18列(组),然后显示表中这些位置关联的元素,然后尝试格式化它(例如,元素1和18之间插入了空单元格,因为该周期中唯一的元素是氢(1)和氦(2)。这方面的一个

我正在学习JavaScript,并进入了书中描述创建新DOM元素(如表、行和列)的部分,因此我想创建一个类似元素周期表的表,稍后在学习新事物时可以返回并处理该表。我的问题是,从目前为止我所了解的一切来看,这段代码应该可以工作。除了它没有显示任何内容,FireFox v29.0的控制台中也没有显示任何内容

理想情况下,我希望创建7行(周期)和18列(组),然后显示表中这些位置关联的元素,然后尝试格式化它(例如,元素1和18之间插入了空单元格,因为该周期中唯一的元素是氢(1)和氦(2)。这方面的一个例子如下:

然而,我的第一个任务(创建一个基本表)似乎不起作用,要么我使用了错误的术语,要么以前没有人发布过这个(而“javascript元素周期表”的链接主要是类似的东西)。关于我这里缺少的东西,有什么想法吗

<html>
    <head>
        <title>Periodic Table</title>
    </head>
    <body>
        <script>

            var periodicTable = createTable( 7, 18);

            var period = 7;
            var group = 18;

            document.body.appendChild(periodicTable);
            function createTable( period, group ) {
                var elementId = 0;
                var table = document.createElement('table');
                for (var p = 1; p < period; ++p) {
                    var tr = table.appendChild(document.createElement('tr'));
                    for (var g = 1; g < group; ++g) {
                        var element = tr.appendChild(document.createElement('td'));
                        element.innerHTML = ++elementId;
                    }
                }
                return table;
            }
        </script>
</html>

元素周期表
var periodicTable=createTable(7,18);
var周期=7;
var组=18;
文件.正文.附件(周期性);
函数createTable(期间、组){
var-elementId=0;
var table=document.createElement('table');
对于(var p=1;p
编辑 基于以下有用的注释,我将代码更改为如下所示:

        <script>

            var periodicTable = createTable( 7, 18);

            document.body.appendChild(periodicTable);
            function createTable( period, group ) {
                var elementId = 0;
                var table = document.createElement('table');
                for (var p = 1; p < period; ++p) {
                    var tr = table.appendChild(document.createElement('tr'));
                    for (var g = 1; g < group; ++g) {
                        var element = tr.appendChild(document.createElement('td'));
                        element.innerHTML = ++elementId;
                    }
                }
                return table;
            }
        </script>

var periodicTable=createTable(7,18);
文件.正文.附件(周期性);
函数createTable(期间、组){
var-elementId=0;
var table=document.createElement('table');
对于(var p=1;p
在原始代码中,您有以下内容:

var periodicTable = createTable( 7, 18);
var period = 7;
var group = 18;
document.body.appendChild(periodicTable);
function createTable( rows, cols ) {
                 :
    for (var p = 1; p < period; ++p) {
        var tr = table.appendChild(document.createElement('tr'));
        for (var g = 1; g < group; ++g) {...}
    }
    return table;
}
var periodicTable=createTable(7,18);
var周期=7;
var组=18;
文件.正文.附件(周期性);
函数createTable(行、列){
:
对于(var p=1;p
思想被提升,即变量在作用域的开始处声明,它们没有初始化,在满足赋值的地方赋值。在代码
期间
中,在执行
createTable
之后,在它们被给定值之前,有值
未定义

您将两个参数传递给
createTable()
,其中它们的名称是
。但是,当您需要这些值时,可以使用全局变量
期间
,它们在执行函数时是
未定义的(它们在函数完成后获得其值)


修复这一点,只需将参数“代码>行> <代码>和<代码> COLS > <代码> > <代码> >代码>组<代码>,并考虑删除全局变量(如果它们在其他地方不需要).

为什么在
createTable
中使用全局变量而不是传递的参数?这些全局变量在使用时是
未定义的。@SalarianEngineer看起来您通过编辑修复了它,但请记住,您仍然可以将文本传递给函数(7,18)不要先将它们分配给变量。嗯……请不要根据评论或答案编辑你的帖子,如果你这样做,它们将变得无关紧要,未来的访问者可能会感到困惑。@Teemu好主意,我会回去编辑更改。谢谢你提出来!@Victor2748谢谢你的链接。我在搜索时没有看到这一点这里,但我想我使用的术语不正确。不过有一个问题:为什么getElementsByTagName()方法的末尾有[0]?var body=document.getElementsByTagName('body')[0];