javascript - 执行<script>中的代码

标签 javascript html

标签上的代码何时开始执行?是连续的吗?

<html>
<head>
<title>Canvas tutorial</title>
<script type="text/javascript">
  function draw(){
    var canvas = document.getElementById('tutorial');
    if (canvas.getContext){
      var ctx = canvas.getContext('2d');
    }
  }
</script>
<style type="text/css">
  canvas { border: 1px solid black; }
</style>
</head>
<body onload="draw();">
<canvas id="tutorial" width="150" height="150"></canvas>
</body>
</html>

上面是一段工作代码。为什么 script 位于 canvas 元素上方?

最佳答案

对于放置稍后调用的脚本函数的位置有多种选择。

  1. <head>部分。此处的脚本将立即可用,并且可以被加载文档时执行的任何其他脚本使用。

  2. <body>部分与 HTML 混合在一起。这些脚本将在解析文档中的该位置时执行。 DOM 中脚本之前的所有内容都将就位并准备就绪。脚本之后的所有内容尚不可用。

  3. 在正文的最后,</body> 之前标签。当这些脚本执行时,之前的整个文档就准备好了。

在您的特定情况下,函数在 <head> 中定义。部分,以便稍后可以执行。由于代码出现在 <head> 中的方式部分,该代码只是一个函数定义。解析该代码时实际上不会执行任何操作。当页面及其图像通过此行中指定的 onload 处理程序加载完成时,就会执行该函数本身:

<body onload="draw();">

只有这样,代码才会真正被调用并运行。 draw()对于此特定问题,函数可以在上述三个位置中的任何一个位置定义,因为 onload 处理程序位于所有三个选项之后。至于为什么脚本位于canvas元素之上,那只是页面设计者做出的选择。如果他们愿意,他们可以将脚本放在 Canvas 元素之后,并且页面仍然可以正常工作。

一个好的工作实践是将脚本放在 <body> 的最后位置。尽可能,因为这样可以更快地加载和显示页面内容。但是,在创建页面期间需要一些脚本(例如选择使用 document.write() 的脚本),因此它们必须提前放置,以便在需要时可用。脚本也可以标记为 deferasync进一步延迟加载以允许首先显示内容。

关于javascript - 执行&lt;script&gt;中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20297479/

相关文章:

javascript - Foundation 6核心js错误

html - 尝试对齐 div、HTML 和 CSS 中的文本

html - 具有水平居中内容的布局的两种背景颜色

javascript - jQuery UI、iFrame、IE 中的蓝色图像边框(9)

javascript - 页面底部固定 div 在给定位置停止的问题

html - 在 HTML5 中使用本地存储我可以在不同用户之间共享它吗

javascript - 如何使用 map 创建数组列表?

javascript - 如何让gh-pages找到bundle.js

javascript - 在 Firefox 和 IE 上从服务器下载文件

javascript - 有没有办法重置:after/:before CSS rules for an element?