学习javascript,需要澄清变量值

时间:2011-07-16 12:09:24

标签: javascript

我正在做JS教程和长话短说,我们必须得到一定数量的数字并将它们传递给带有“square”的ID的HTML表格/单元格。代码有效,但我不确定如何。我混淆了2部分。 (代码下方)

window.onload = newCard;

function newCard() {
    for(var i=0; i<24; i++){
        setSquare( i )
    }
    function setSquare (thisSquare) {
        var currSquare = "square" + thisSquare; 
        var newNum = Math.floor(Math.random()*75 )+1
        document.getElementById(currSquare).innerHTML = newNum;
    }
}
  1. 第一个函数newCard,在循环完成后,设置其最终值,然后传递它setSquare,这是它下面的下一个函数。我得到的是......假设解析从上到下,setSquare尚未定义,所以不应该返回错误吗?

  2. 关于在第二个函数上解析和分配值的困惑。

    var currSquare = "square" + thisSquare; 
    
    第二个函数中的

    setSquare现在具有传递的函数1的数值。变量currSquare从主HTML表中获取"square" id,并从上面的函数1中添加值。我的问题是,javascript如何知道函数2中的"square"是一个id而不是一个字符串?更多因为它,

    document.getElementById(currSquare).innerHTML = newNum;
    

    currSquare的主页上没有ID,那么如果没有这样的话,如何“获取”并传递newNumcurrSquare是一个变量。

2 个答案:

答案 0 :(得分:3)

你的困惑是可以理解的,但有一些你忽视的事情。

首先,当您设置windows.onload = newCard时,您告诉浏览器在文档完成加载时调用newCard函数。

当文档完成加载时,所有的解析都已经完成,所以所有的变量和函数定义都已经完成,并且保存了一些语法错误,一切都应该很好。

该行:

var currSquare = "square" + thisSquare;

简单地将字符串"square"thisSquare变量中的数字的字符串表示形式连接起来。在处理不同类型时,大多数现代语言都试图找到操作数之间的共同点。

对于document.getElementById()函数,在HTML中它必须有格式为squareXXX的某种标识符,其中XXX是0到23之间的数字。否则代码将不起作用会抛出异常,说没有这样的身份。

答案 1 :(得分:2)

  

假设解析从上到下,setSquare尚未定义,所以它不应该返回错误吗?

函数声明被提升到包含范围的顶部function setSquare() {}是一个函数声明,因此您的代码实际上与在循环之前声明函数相同:

function setSquare (thisSquare) {
    //...
}
for(var i=0; i<24; i++){
    setSquare( i )
}
  

javascript如何知道函数2中的“square”是id而不是字符串?

没有。它是一个字符串,并按此处理。在JavaScript中没有像“id数据类型”的东西。 currSquare是一个包含字符串"squareX"的变量,其中X是thisSquare(0到23)的值。

  

currSquare的主页上没有ID,所以它怎么能“得到”它

document.getElementById期望一个字符串作为参数。该字符串应该是某个元素的id。这没什么特别的。您传递的是currSquare中包含的字符串,而不是传递文字字符串(就像您将i中包含的整数传递给setSquare)。


虽然你正在做一个教程,但你似乎还没有完全理解基础知识。也许MDC JavaScript Guide会帮助你更多。请特别阅读Values, Variables, and LiteralsFunctions and function scope