Bootstrap

12【module的语法】

module的语法

1.初识Module

(1)什么是模块

模块:一个一个的局部作用域的代码块。

(2)什么是模块系统

模块系统:系统的解决了模块化一系列问题。

  1. 模块化的写法(之前我们用立即执行函数模拟模块化,ES6 则实现了针对模块化的语法)
  2. 消除全局变量(模块中的变量都是局部的,不同模块之间不会相互干扰,可以通过特定语法暴露指定内容)
  3. 管理加载顺序(之前我们将一个总的 JavaScript 程序分几个文件写,但在最终合并调用时,js 的引入需要满足前后依赖关系。比如:被引用的 js 文件就一定要在引用它的 js 文件之前加载)

2.Module的基本用法

注意:Module 要生效,必须在服务器环境下才能执行。

普通的 HTML、JS 是本地文件环境,地址以 file 协议开头,服务器则以 http 或 https 开头。

方法:VSCode 中使用 Live Server 拓展,WebStorm 默认就是服务器环境。

  • 一个 JS 文件就是一个模块
  • 用 import 关键字导入模块
  • 用 export 关键字导出模块需要暴露的部分
  • 在使用 script 标签加载的时候,需要加上 type=“module”,否则就以普通 JS 文件的形式引入了,就不是模块了

3.Module的导入导出

导出的东西可以被导入(import),并访问到!

对于导入和导出有两种方法:

  • export default 导出,import 导入
  • export 导出,import 导入

3.1 export default 导出和对应的 import 导入

(1)一个模块没有导出,是否可以将其导入?

<!-- 一个模块没有导出,也可以将其导入 -->
<!-- 被导入的模块的代码都会执行一遍,并且同一个模块的导入只执行一遍! -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Module</title>
</head>
<body>
<!-- script 标签需要加上 type="module" -->
<script type="module">
    import "./test.js";		// 浏览器控制台打印:test
    import "./test.js";		// 不执行
    import "./test.js";		// 不执行
    import "./test02.js";	// 浏览器控制台打印:test02
    import "./test.js";		// 不执行
    import "./test02.js";	// 不执行
</script>
</body>
</html>

----------------------------------------------------
<!-- test.js -->

console.log("test");

----------------------------------------------------
<!-- test02.js -->

console.log("test02");

(2)一个模块中只能有一个 export default。

【module.js】

// 模块中的变量都是局部的
const age = 18;
const sex = "male";

export default age;			// 通过 export default 导出(暴露)一个值
// export default sex;		// 报错!因为 export default 只能在一个文件中导出一次!!!

/*
export default 24;				// 可以导出值
export default {};				// 可以导出对象
export default function(){};	 // 可以导出函数
export default class{};			 // 可以导出class
*/

【index.html】

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Module</title>
</head>
<body>
<!-- script 标签需要加上 type="module" -->
<script type="module">
    // import 之后跟一个模块的别名,推荐别名与导出时的名字相同,比如这里就用 age
    import age from "./module.js";
    console.log(age);	// 18
</script
;