JavaScript执行
我有两个脚本,它们包含在HTML正文中。 在第一个脚本中,我正在初始化第二个脚本标记中引用的JS对象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
<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
,除非我将所有东西都设计成这样:)