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

本文详细介绍ES6模块系统的基础概念和核心用法,包括export、import命令的语法与注意事项,as命令与export default命令的特点和使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

一、概述

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文件_半糖冰的博客-优快云博客

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语句需要使用大括号。

结束语 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值