// import name from './2.js' // 写法一// import name,{age} from './2.js' // 写法二:注意,默认导入一定要放在前面// import name,* as people from './2.js' // 写法三// import {default as myName} from './2.js' // 写法四
模块化的导入
导入的写法
import*as people from'./1.js'// 导入全部import{ name }from'./1.js'// 导入部分import{name as myName }from'./1.js'// 导入部分并设置别名
let name ='zsy'exportdefault name;// 写法一// export default function getName(){// return 'zsy1'// } // 写法二// export default function(){// return 'zsy2'// } // 写法三// export {name as default} // 写法四
// let name;// export default name = 'zsy' // 写法正确// export default 'zsy' // 写法正确// export default let name = "peiqi" // 写法错误
模块化的限制
由于ES6中的模块被设计成了静态的,因此需要在编译阶段就明确模块之间的依赖关系
而不是在运行过程中动态计算
模块路径不能设为变量或表达式
下面的写法都是错误的
// let myPath = './1.js'// export * from myPath; // 变量// export * from './' + '1.js'; // 表达式// import * as people from myPath; // 变量// import * as people form './' + '1.js'; // 表达式
模块化无法动态的导入和导出
export 和 import语句都是静态的,无法动态导出和导入
并且只能出现在模块的顶层作用域中,不能出现在块级或函数作用域中
下面的代码是错误的
// 函数作用域functiongetName(){export*from'./1.js';import*as people from'./1.js'}// 块级作用域if(true){export*from'./1.js';import*as people from'./1.js'}