Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript执行_Javascript - Fatal编程技术网

JavaScript执行

JavaScript执行,javascript,Javascript,我有两个脚本,它们包含在HTML正文中。 在第一个脚本中,我正在初始化第二个脚本标记中引用的JS对象 <body> ... <script type="text/javascript" src="http://url/script.js"></script> <script type="text/javascript"> obj.a = 1000; obj.do(); </script> </b

我有两个脚本,它们包含在HTML正文中。 在第一个脚本中,我正在初始化第二个脚本标记中引用的JS对象

<body>
  ...
  <script type="text/javascript" src="http://url/script.js"></script>
  <script type="text/javascript">
     obj.a = 1000;
     obj.do();
  </script>
</body>

...
目标a=1000;
obj.do();
如果第一个脚本(通过HTTP)的加载时间很慢,会发生什么? 主体中JS的执行顺序如何?

页面源中的标记与页面加载同步执行

在脚本完成下载和执行之前,浏览器不会解析或呈现
标记后的任何HTML


这就是为什么最好将所有
标记移到页面底部,以便首先呈现HTML。

+1。另一个选项是在window.addEventListener('load',function(){…此处的代码…})中包装js代码的第二位;这样,内联脚本只有在加载所有内容后才能执行。@psema4这一点都没有帮助,因为第一个JS文件仍然阻止正在呈现的HTML…问题是关于JS的执行顺序,而不是阻止HTML呈现。使用eventListener可以确保内联js在特定时间运行。(呃,事件)问题是,由于某些原因,我无法解释,有时应该在“”中初始化的“obj”对象未定义(没有任何其他错误)。因此,如果我得到正确的注释,这应该不会发生,因为script.js是在“obj.a=1000说明。另请参阅。@apsillers。如果内联脚本引用外部脚本,我认为这里不可能使用它…@Ian True-也许您可以为外部脚本拼凑一个
load
侦听器,但这将是跨浏览器兼容性的噩梦。否则,
async
仅在链接脚本是主要活动脚本(即,不是库)或链接脚本触发自定义事件宣布它已准备就绪时才有用,而大多数库不会这样做。@apsillers确切地说,这是一个很好的解释。这就是为什么我厌倦了使用
async
,除非我将所有东西都设计成这样:)