Javascript 为什么不能设置`document.getElementById(“text”);`全球化?

Javascript 为什么不能设置`document.getElementById(“text”);`全球化?,javascript,Javascript,这是我的60秒计时代码,它运行成功 <html> <head> <script type="text/javascript"> var start=Date.now(); function showtime(){ var c=document.getElementById("text"); var nowtime=60-Math.floor((Date.now()-start)/1000); c.

这是我的60秒计时代码,它运行成功

<html>
<head>
<script type="text/javascript">
    var start=Date.now();
    function showtime(){
        var c=document.getElementById("text");
        var nowtime=60-Math.floor((Date.now()-start)/1000);
        c.innerHTML="left time is "+ nowtime +" seconds";
    }
    function countTime(){
        var c=document.getElementById("text");
        c.innerHTML="left time is 60 seconds";             
        setInterval("showtime()",1000);
    }
</script>
</head>
<body onload="countTime()">
<div id="text"></div>
</body>
</html>

请解释设置document.getElementByIdtext时程序无法运行的原因;详细信息为全局。

它可以工作,但在脚本运行并尝试查找元素时的第二个示例中,它不在那里,因为您既没有使用window.onload,也没有将脚本放在html下面。不要把javascript放在头上。将代码重新设置为

<html>
<head>

</head>
<body onload="countTime()">
<div id="text"></div>
<script type="text/javascript">
    var start=Date.now();
    var c=document.getElementById("text");
    function showtime(){
        var nowtime=60-Math.floor((Date.now()-start)/1000);
        c.innerHTML="left time is "+ nowtime +" seconds";
    }
    function countTime(){
        c.innerHTML="left time is 60 seconds";             
        setInterval("showtime()",1000);
    }
</script>
</body>
</html>

它会工作。

它会工作,但在第二个示例中,当脚本运行并尝试查找元素时,它不在那里,因为您既没有使用window.onload,也没有将脚本放在html下面。不要把javascript放在头上。将代码重新设置为

<html>
<head>

</head>
<body onload="countTime()">
<div id="text"></div>
<script type="text/javascript">
    var start=Date.now();
    var c=document.getElementById("text");
    function showtime(){
        var nowtime=60-Math.floor((Date.now()-start)/1000);
        c.innerHTML="left time is "+ nowtime +" seconds";
    }
    function countTime(){
        c.innerHTML="left time is 60 seconds";             
        setInterval("showtime()",1000);
    }
</script>
</body>
</html>

而且它会起作用。

因为您只需要在代码运行时使用DOM元素,所以您也可以使用事件并将代码保存在头部:

<script>
  document.addEventListener("DOMContentLoaded", function() {
    console.log("DOM fully loaded and parsed");
  });
</script>

然后将所有代码放入事件侦听器。

由于您只需要在代码运行时提供DOM元素,因此您也可以使用事件并将代码保留在头部:

<script>
  document.addEventListener("DOMContentLoaded", function() {
    console.log("DOM fully loaded and parsed");
  });
</script>
然后将所有代码放入事件侦听器。

您正在将脚本加载到文件中,这意味着在生成主体之前脚本已完全加载

在第一个代码段中,c=document.getElementByIdtext位于脚本中的函数中

因此,该语句仅在调用函数时执行

该调用发生在主体加载之后

此时,id=text的元素已经存在,因此getElementById能够找到它,并且c已经正确定义

但是,当您将该语句移到全局范围之外时,该语句会在创建div之前加载主体之前执行

因此,document.getElementbyIDtext将找不到任何内容,c将被设置为未定义,因此没有任何用处。

您正在文件中加载脚本,这意味着在生成正文之前脚本已完全加载

在第一个代码段中,c=document.getElementByIdtext位于脚本中的函数中

因此,该语句仅在调用函数时执行

该调用发生在主体加载之后

此时,id=text的元素已经存在,因此getElementById能够找到它,并且c已经正确定义

但是,当您将该语句移到全局范围之外时,该语句会在创建div之前加载主体之前执行

因此,document.getElementbyIDtext将找不到任何内容,c将被设置为未定义,因此没有任何用处