JavaScript 是一种脚本语言,它可以在浏览器中加载和执行。在 HTML 文档中,JavaScript 代码可以直接嵌入到 HTML 文档中,也可以通过引用外部 JavaScript 文件来加载和执行。
当浏览器请求一个 HTML 文档时,它会解析 HTML 文档中的元素和属性,并在渲染文档之前加载和执行嵌入在文档中的 JavaScript 代码。这种方式称为“内联脚本”。
如果 JavaScript 代码被保存在外部文件中,那么可以在 HTML 文档中使用 <script> 标签引用这些文件。当浏览器解析到这个标签时,它会暂停渲染文档并加载和执行引用的 JavaScript 文件。这种方式称为“外部脚本”。
需要注意的是,在HTML中引入JavaScript文件时,如果使用async和defer属性,可以改变JavaScript文件的加载和执行顺序。
- async : 异步加载,不会阻塞渲染,下载完成后立即执行。
- defer : 延迟加载,defer 会在文档完全解析完成之后才会加载并执行 JavaScript 文件,这样可以保证 JavaScript 文件在文档完全解析完成后再执行,不会对文档渲染造成影响。
另外,JavaScript 代码在浏览器中是运行在单线程的环境下的,如果 JavaScript 代码中存在长时间的循环或等待,会影响到页面的渲染和用户交互。
在 JavaScript 中还可以使用动态加载脚本的方式,比如使用 JavaScript 的 document.createElement('script')
和 appendChild()
方法来动态加载脚本,或者使用 fetch()
方法加载脚本并使用 eval()
方法来执行。
这种方式可以在页面运行时加载并执行脚本,它可以在页面某些条件下才加载某些脚本,或者在页面某个时间点才加载某些脚本等。
然而,动态加载脚本的方式存在一些风险,因为它会在运行时执行脚本,如果脚本中存在漏洞或恶意代码,可能会对页面和用户造成安全威胁。
另外,JavaScript 代码执行还受到浏览器的同源策略限制,同源策略限制了JavaScript 代码只能访问来自同一来源(协议,域名,端口)的资源。
这样可以保证 JavaScript 代码不能访问来自不同来源的敏感信息,防止恶意网站获取用户的隐私信息。
如果需要跨域访问资源,可以使用 JSONP,CORS,WebSocket,WebRTC 等技术来实现。
还需要注意的是,在 JavaScript 代码执行过程中,会有一些错误和异常产生,主要有语法错误,类型错误,引用错误等,这些错误会导致 JavaScript 代码无法正常执行。
为了避免这些错误,可以使用工具来检查语法,使用单元测试来检查代码的正确性,使用 try-catch 语句来捕获错误,使用错误监听器来捕获错误。
总之,JavaScript中支持加载和执行脚本的方式有多种,包括内联脚本,外部脚本,动态加载脚本。