es6模块化导入导出

摘要:
然后输入//import{fn}from'/xx.js';将自动采用严格模式Es6中模块导入的基本语法。如果要从一个文件(模块)访问另一个文件的功能,则需要通过import关键字将{identifier 1导入到另一个模块中。

模块化指的就是将一个大程序拆分成若干个互相依赖的小文件,然后在用简单的方法拼装起来。

在 ES6 之前,JS没有模块化系统,社区制定了一些模块加载方案

最主要的有 CommonJS(Asynchronous module definition) 和 AMD(common module definition) 两种。前者用于服务器,后者用于浏览器

/*
CommonJS(node遵循该规范)
    ->require.js    引入
    ->module.exports 导出 
   
AMD
    比如 -> require.js
CMD
    比如 -> sea.js
*/

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量

(CommonJS 模块就是对象,输入时必须查找对象属性)

ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入

//import {fn} from './xx.js'; 引入模块
//export function fn(){}  导出模块

模块可以理解为函数代码块的功能,是封装对象的属性和方法的javascript代码,它可以是某单个文件,变量或者函数

在Es6模块中,无论有没有加"use strict",都会自动采用严格模式

Es6中模块导入的基本语法

如果想从一个文件(模块)访问另一个文件(模块)的功能,则需要通过import关键字在另一个模块中引入数据

import {标识符1,标识符2} from "本地模块路径"

导入单个绑定:

// 只导入一个
 import {sum} from "./example.js"

导入多个绑定:

// 导入多个
import {sum,multiply,time} from "./exportExample.js"

导入整个模块:

用星号(*)指定一个对象,所有输出值都加载在这个对象上面

// 导入一整个模块
import * as example from "./exportExample.js"

如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名

import { lastName as surname } from './profile.js';

Es6中模块导出的基本语法

模块的导出,export关键字用于暴露数据,暴露给其他模块

可以将export放在任何变量,函数或类声明的前面,从而将他们从模块导出

// profile.js
export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;

在export命令后面,使用大括号指定所要输出的一组变量

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export {firstName, lastName, year};

两种方式是等价的,第二种方式。应该优先考虑使用第二种这种写法(在尾部,一眼看清楚输出了哪些变量)

//导出函数
export function sum(num1,num2){
     return num1+num2;
}
//导出类
export class People{
     constructor(name,age){
        this.name = name;
        this.age = age;
     }
     info(){
        return `${this.name}${this.age}`
     }
}

通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名

function v1() { ... }
function v2() { ... }

export {
  v1 as streamV1,
  v2 as streamV2,
};

export default命令

export default命令用于指定模块的默认输出,一个模块只能有一个默认输出

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

import crc32 from 'crc32'; // 输入

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

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

第一组使用export default时,对应的import语句不需要使用大括号

第二组是不使用export default时,对应的import语句需要使用大括号

因此export default命令只能使用一次。所以,import命令后面不用加大括号,因为只可能唯一对应export default命令

export default也可以用来输出类

// MyClass.js
export default class { ... }

// main.js
import MyClass from 'MyClass';
let o = new MyClass();

export 与 import 的复合写法

如果在一个模块之中,先输入后输出同一个模块,import语句可以与export语句写在一起

export { foo, bar } from 'my_module';

// 可以简单理解为
import { foo, bar } from 'my_module';
export { foo, bar };

免责声明:文章转载自《es6模块化导入导出》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇shell脚本传可选参数 getopts 和 getopt的方法Android随笔之——用shell脚本模拟用户按键、触摸操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

变量的结构赋值

ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解耦; 1 数组的解耦赋值 以前,为变量赋值,只能直接指定值。 let a = 1; let b = 2; let c = 3; ES6允许写成下面这样。 let [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。 这种写法属于...

BAT教程 :第四节(批处理中的变量)

批处理中的变量,我把他分为两类,分别为"系统变量"和"自定义变量"系统变量:他们的值由系统将其根据事先定义的条件自动赋值,也就是这些变量系统已经给他们定义了值,不需要我们来给他赋值,  %ALLUSERSPROFILE%本地 返回“所有用户”配置文件的位置。%APPDATA%本地 返回默认情况下应用程序存储数据的位置。%CD%本地 返回当前目录字符串。%C...

bat批处理下如何像shell一样将命令执行的效果赋值给变量

在bat下如何实现像shell一样,把执行命令行后的结果赋值给变量呐? 刚开始,可真难为到我了。随着对bat批处理知识熟悉的加深。 学习到了!!! 举个 栗子: svnlook  uuid  C:Repository est          # 这行命令什么意思呐。它是svn服务器的命令(因为最近在搞svn的东西啦)。                  ...

Linux文件目录权限浅谈

1、基本权限三种(1)r (read) 读 针对目录,有读(r)权限就代表能对此目录有列表功能,就是可以执行ls命令进行查看,另外还有cp的功能。针对文件,有读(r)权限就代表能对此文件有阅读功能,可以通过cat等命令查看文件内容。 (2)w (write) 写 针对目录,有写(w)权限就代表着在此目录下创建文件和目录,可以通过touch,mkdir等命令...

远程桌面连接会话超时或者被限制改组策略也没用的时候就这么解决

今天管理一台服务器,远程连接时帐号密码都输入完后,点连接后弹出一个 “终端服务器超出最大允许连接”。上网查了一下归结一下出现这 种情况的原因和解决办法。 原因:用 远程桌面链接登录到终端服务器时经常会遇到“终端服务器超出最大允许链接数”诸如此类错误导致无法正常登录终端服务器,引起 该问题的原因在于终端服务的缺 省链接数为2个链接,并且当登录远程桌面后如...

Zookeeper四字命令

ZooKeeper 支持某些特定的四字命令(The Four Letter Words)与其进行交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。 ZooKeeper 常用四字命令主要如下: ZooKeeper四字命令 功能描述...