在ES6之前我们的 JavaScript 是没有模块化这个概念的,ECMAScript2015之前想要实现模块化我们需要引入第三方的库,比如AMD规范的requireJS库,再或者遵循CMD规范的seaJS库,这都是过去式了,现在的 JavaScript 已经支持了模块化开发规范 ES Module,这使得 JavaScript 支持了原生模块化开发,ES Module把一个文件当作一个模块,每个模块都有自己的独立作用域,核心点就是import导入模块以及export导出模块,这可在我们的框架中大有用处,如果你想学习框架,那么这个ES6知识点是你必须要学会的
const testFunc = name => `我的名字是:${name}`;
export default testFunc;
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documenttitle>
head>
<body>
<script type="module">
import testFunc from './script.js';
console.log(testFunc('小郭'));
script>
body>
html>

// 导出
const name = 'Brave-AirPig';
const testFunc = name => `我的名字是:${name}`;
export { testFunc, name };
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documenttitle>
head>
<body>
<script type="module">
import { testFunc, name } from './script.js';
console.log(testFunc(name));
script>
body>
html>
//----------------或者---//
// 导出
const name = 'Brave-AirPig';
const testFunc = name => `我的名字是:${name}`;
export default { testFunc, name };
// 导入
<script type="module">
import myScript from './script.js';
console.log(myScript.testFunc(myScript.name));
</script>

比如我在导入的script脚本文件中又声明了一个name变量,那么我们该怎么避免这样的命名冲突呢?
<script type="module">
import { testFunc, name } from './script.js';
const name = '小郭';
console.log(testFunc(name));
</script>

解决方案:导入时重命名
<script type="module">
import { testFunc, name as first_name } from './script.js';
const name = '小郭';
console.log(testFunc(name));
</script>

或者呢,我们可以在导出时进行一个重命名:
const name = 'Brave-AirPig';
const testFunc = name => `我的名字是:${name}`;
export { testFunc, name as first_name };
<script type="module">
import * as myScript from './script.js';
const name = '小郭';
console.log(myScript.testFunc(myScript.first_name));
</script>