ES6(八)Module 模块(保姆级)

目录

前言

一、概述

1、模块含义

2、特点

二、export命令

1、含义

2、语法

3、规范注意

三、import命令

1、含义

2、语法

3、注意

(1)引用

(2)只读属性

(3)自动提升

上面代码中,import会自动提升至最顶部,这样写是合法的

 (4)静态

三、模块在html文件的实现

1、常见错误

2、解决方法

3、文件实现

四、as命令

1、含义

2、语法

五、export default 命令

1、唯一性

2、无需{}

3、任意变量接收

4、实例比较

结束语 


前言

       模块存在的必要性,使得大型的程序可拆分成各个相互依赖的文件,再搭积木般的拼成一个大型的程序,如果没有这项功能,将对开发大型的项目构成巨大障碍。在此之前,平替模块功能的主要是最主要的有 CommonJS (用于服务器)和 AMD(用于浏览器) 。而ES6对模块的实现,可取代上面两种规范。
      ES6 引入了模块化,其设计思想是在编译时就能确定模块的依赖关系,以及输入和输出的变量。这种设计思想使得ES6的模块化相对之前的解决方法又拓宽了许多语法(如静态优化等),ES6 的模块化分为 export import 两个模块。

      今天,小糖分享的是Module的一些特点、基本用法。建议配合任一种官方教程及相关书籍食用,效果更佳~

一、概述

1、模块含义

一个独立文件就是一个模块,该文件内部的所有变量,外部无法获取。

2、特点

(1)ES6模块自动开启严格模式,不管你有没有在模块头部加上"use strict";

(2)模块中可以导入导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。

(3)每个模块都有自己的上下文,每一个模块内声明的变量都是局部变量,不会污染全局作用域。

(4)每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取

二、export命令

1、含义

export命令用于规定模块的对外接口

理解:根据模块的含义,如果我们想在外部获取该文件的变量,就必须使用export关键字导出该变量。

2、语法

以一个JS文件为例,里面使用export关键字导出变量

// hero.js
var tname = '李白';
var capacity= function(){
    return tname+"的神来之笔";
}
var year = 1000;

export {tname,  capacity, year };

//推荐写法,这样就可以在脚本尾部,一眼看清楚输出了哪些变量。

推荐写法,这样就可以在脚本尾部,一眼看清楚输出了哪些变量。

3、规范注意

在对外输出接口时,需要特别注意的是,export命令规定的是对外的接口必须与模块内部的变量建立一一对应关系。

以如下代码为例

// 报错
var num = 1;
export num;

这种写法通过变量num,还是直接输出 1(只是一个值),不是接口。正确的写法是下面这样。

//正确

var num = 1;
export {num};

functionclass的输出,也必须遵守这样的写法。

三、import命令

1、含义

import 命令用于输入其他模块提供的功能

理解:使用 import,我们就可以模块的对外接口导入所需文件中

2、语法

将上一个JS文件export导出的变量和函数导入

/** 引用模块 **/
//index.js
import { tname,  capacity, year } from './hero.js';
console.log(tname);
console.log(capacity());
console.log(year);

3、注意

(1)引用

外部引用文件时,需声明引用脚本的类型(即在<script>标签内加type="module"),否则将会错的让你怀疑人生噢~             index.js文件的内容也可以直接写在script标签内~

如图 两种形式的书写

(2)只读属性

import 命令输入的变量都是只读的,因为它的本质是输入接口。也就是说,不允许在加载模块的脚本里面,改写接口。否则报错!(对象就可以改写属性

(3)自动提升

import命令具有提升效果,会提升到整个模块的头部,首先执行。

    console.log(tname);
    console.log(capacity());
    console.log(year);
    import { tname,  capacity, year } from './hero.js';

上面代码中,import会自动提升至最顶部,这样写是合法的

 (4)静态

模块的设计思想为静态,使得一些需要运行时才能得到结果的语法结构不能被使用,如变量使用,表达式等。

三、模块在html文件的实现

1、常见错误

      新手会错误的以直接打开浏览器的方式运行,这样会出现如下错误:

2、解决方法

      以服务器的方式打开浏览器,具体操作(如何以服务器方式打开浏览器小糖已准备给大家好文章(爆肝赶制)啦~   请移步:ES6 Module 模块 服务器模式运行HTML文件_半糖冰的博客-CSDN博客

3、文件实现

下面将上面两个模块在html文件中运行验证

<!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>Document</title>
  <script type="module" src="./index.js"></script>
</head>
<body>
  <h1>hi</h1>
</body>
</html>

四、as命令

1、含义

      as关键字可实现对模块内变量名的改写。

2、语法

      以export模块内的变量为例(import同样的道理)

/** 定义模块 hero.js **/
// hero.js
var tname = '李白';
var capacity = function(){
    return tname+"的神来之笔";
}
var year = 1000;

export {  //原名        新名字
               tname as his_name, 
               capacity as skill, 
               year as decade
            };

重命名后,这些变量与函数可以用不同的名字输出两次

五、export default 命令

1、唯一性

设计本意就是用来指定默认接口

2、无需{}

通过 export 方式导出,在导入时要加{ }export default 则不需要

         import a from "./xxx.js"; // 不需要加{}

3、任意变量接收

export default 向外暴露的成员,可以使用任意变量来接收。

         import b from "./xxx.js"; // 可以使用任意变量接收

4、实例比较

下面比较一下默认输出和正常输出。

// 第一组
export default function capacity ()  {// 输出
  // ...
}

import capacity from 'capacity'; // 输入

// 第二组
export function capacity() { // 输出
  // ...
};

import {capacity} from 'capacity'; // 输入

上面代码的两组写法,第一组是使用export default时,对应的import语句不需要使用大括号;第二组是不使用export default时对应的import语句需要使用大括号。

结束语 

希望本篇文章可以帮到求知若渴的众多同学吖~       这篇文章及附属文章属实花费了不少功夫吖!若能帮到 也欢迎点赞、收藏、关注小糖后续也会持续发布新文章,祝大家学有所成!!!
欢迎各位前端大佬留言讨论指教! 小糖谢谢各位啦~❤  ❤  ❤  ❤

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值