浏览器加载 JS 脚本流程

浏览器加载 JS 脚本流程

加载传统 ES5 JS 脚本的流程

在 HTML 网页中,浏览器通过

对于外部的模块脚本(上例是 foo.js),有几点需要注意。

  1. 代码是在模块作用域之中运行,而不是在全局作用域运行。模块内部的顶层变量,外部不可见。
  2. 模块脚本自动采用严格模式,不管有没有声明 use strict。
  3. 模块之中,可以使用 import 命令加载其他模块(.js 后缀不可省略,需要提供绝对 URL 或相对 URL),也可以使用 export 命令输出对外接口。
  4. 模块之中,顶层的 this 关键字返回 undefined,而不是指向 window。也就是说,在模块顶层使用 this 关键字,是无意义的。
  5. 同一个模块如果加载多次,将只执行一次。

下面是一个示例模块。

import utils from "https://example.com/js/utils.js";

const x = 1;

console.log(x === window.x); //false
console.log(this === undefined); // true

利用顶层的 this 等于 undefined 这个语法点,可以侦测当前代码是否在 ES6 模块之中。

const isNotModuleScript = this !== undefined;

文章主要参考浏览器加载

你可能感兴趣的:(web前端开发)