ES6学习笔记(二十)ES Module的语法与使用

JavaScript进阶(二十六):ES各版本特性详解_es版本 开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】给大家分享一些关于HTML的面试题。// 输出当一个类具有父类时,会先执行父类的静态块,再执行子类的静态块。可以利用 `super` 在子类的静态块中访问父类的属性。### 最后**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.youkuaiyun.com/topics/618166371)****给大家分享一些关于HTML的面试题。** 阅读详情

下面要写出的ES Module的语法,现在还无法在node直接执行,建议使用babel转码后执行(webpack配置babel执行ES module语法)
首先,在谈及ES module的语法前,要先明确一点,ES module默认使用严格模式
javascript严格模式整理,所以松散模式下的一些不会报错的地方在使用ES module时要注意

export


输出方式

1. 将整个声明输出

简单的变量

export var a = 1;

方法

export function fn(){
    // ...
}

类

export class c{
    // ...
}

2. 放在花括号内输出

var a = 1;
var b = 2;
export { a , b };
function fn(){
    // ...
}
export { fn };
class c{
    // ...
}
export { c };

3. as语法

ES module可以给输出的内容重命名,使用as来实现

var a = 1;
export { a as b };

注意点

命令所在

export命令可以写在当前模块顶层作用域的任何地方,写在块级作用域中会报错

if (true) {
    export var b = 2;
}

动态性

export命令输出的值是动态性的,在当前文件变量修改时,export输出的值也会随之变化

export var a = 1;
setTimeout(() => a = 2, 500);

上面这段代码,在500ms后输出的a的值会改变

import


输入方式

1. 花括号引入

import {…} from …

import { a } from 'xxx.js'
console.log(a);

花括号内的内容是其他模块export输出的内容,用as语法时是写 as 后的名称
from后面的路径可以是绝对路径,相对路径,或者是模块名

2. as语法

将引入的内容使用另一种别名,即等同于赋值给另一个变量

import { a as b } from 'xxx.js'

3. 导入整个模块

import ‘module’

注意点

sington

import命令是sington即单例模式的,多次引用只会被当作引用一次
(单例模式只在第一次引用时引用,后面的引用会直接使用之前引用的内容:JavaScript设计模式笔记(一)单例模式))

import { a } from 'xxx.js'
import { a } from 'xxx.js'

这里写了两句import语句,实际上只import了一次

import { a } from 'module.js'
import { b } from 'module.js'
// 等同于
import { a , b } from 'module.js'

上面代码中的这两种情况,在执行上是完全相同的,因为是引入同一个模块中的两个相同的变量

只读性

import命令引入的变量都是只读的,不能对其重新赋值,如果对import的变量进行赋值,则会报Syntax Error的错误

import { a } from 'xxx.js'
a = 2; // Syntax Error : 'a' is read-only

提升性

和var的变量声明提升一样,import引入的变量也会提升到整个模块的头部,被首先执行

console.log(a);
import { a } from 'xxx.js'

这里的a可以正常输出

静态执行

import是静态执行的,和require不一样,import是在编译的时候执行的,所以不能使用表达式和变量,也不能在块级作用域中使用
下面的代码都是错的

import { 'a'+'b' } from 'xxx.js'

let a = 'b';
import { a } from 'xxx.js'

if(true){
    import { b } from 'xxx.js'
}

这里的代码分别使用了拼接字符串,使用变量的值以及if-else语句,这些是在运行阶段执行的内容,在编译阶段不会执行这些内容,所以会报错

export default


输出语法

1. 声明后输出变量

var a = 1;
export default a;

2. 输出匿名函数

export default function(){
    // ...
}
// 输出非匿名函数也会被当作匿名函数
// 下面的输出对于import来说和上面的一样
export default function fn(){
    // ...
}

3. 放在花括号中输出

var a = 1;
var b = 2;
export default { a , b }

与export的不同

不能输出声明

使用export命令时,我们可以直接输出声明,但是使用export default时,不能输出声明

// 正确写法
export var a = 1;
var a = 1;
export default a;
// 错误写法
export default var a = 1;

import时能否修改变量名

直接使用export命令来输出内容,在import时必须知道export时输出的变量名或者函数名,类名,而使用export default时,在import的时候可以忽略输出时的变量名

// module.js
var a = 1
export { a }
// main.js
import { a } from './module.js'
// module.js
var a = 1
export default a
// main.js
import b from './module.js'

上面两段代码可以看出,使用export命令输出变量a,import的时候必须使用变量名a,而使用export default时不用使用同样的变量名,所以上面第二段代码import的时候可以使用b做为变量名

唯一性

export default只能使用一次,如同其名default默认,只能有一个默认的,而export是能够多次输出的

实质

export default实际上是将命令后面的内容赋值给一个变量default然后输出,所以可以通过使用export的as输出来达到同样的效果

export { a as default}
// 等同于
export default a

也正因为这样,所以我们不能在export default后面使用声明语句,因为我们不能将一个声明语句赋值给一个变量

在浏览器中的使用

现在在浏览器中,已经可以使用ES module的语法了
我们可以将script标签的type属性设置为module来使用ES module的语法,下面写个例子
根目录创建index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="module">
        import {a} from "./index.js"
        console.log("a",a)
    </script>
</body>

</html>

同样在根目录,创建一个index.js

export const a = 1

此时双击打开html文件,可能会报这样的错误
在这里插入图片描述
将这个错误翻译一下

加载模块脚本失败:服务器以非javascript MIME类型""响应。根据HTML规范,对模块脚本执行严格的MIME类型检查。

实际上,这是因为我们是在本地文件直接打开的,我们只要将它放在一个服务器下启动就可以了,使用vscode的话可以直接使用插件live server启动

启动后可以看到
在这里插入图片描述
控制台打印除了从index.js引用的a变量,然后我们再测试其动态性
index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="module">
        import {a} from "./index.js"
        setInterval(()=>{ console.log("a",a) },1000)
    </script>
</body>

</html>

index.js

export var a = 1
setInterval(() => {
    a++
}, 1000)

启动服务器打开页面,可以看到
在这里插入图片描述
动态性被成功验证



参考自阮一峰的《ECMAScript6入门》


ES6学习笔记(一)let和const
ES6学习笔记(二)参数的默认值和rest参数
ES6学习笔记(三)箭头函数简化数组函数的使用
ES6学习笔记(四)解构赋值
ES6学习笔记(五)Set结构和Map结构
ES6学习笔记(六)Iterator接口
ES6学习笔记(七)数组的扩展
ES6学习笔记(八)字符串的扩展
ES6学习笔记(九)数值的扩展
ES6学习笔记(十)对象的扩展
ES6学习笔记(十一)Symbol
ES6学习笔记(十二)Proxy代理
ES6学习笔记(十三)Reflect对象
ES6学习笔记(十四)Promise对象
ES6学习笔记(十五)Generator函数
ES6学习笔记(十六)asnyc函数
ES6学习笔记(十七)类class
ES6学习笔记(十八)尾调用优化
ES6学习笔记(十九)正则的扩展
ES6学习笔记(二十)ES Module的语法

OpenGL ES与EGL的关系(二十一) 从上面的例子中,我们发现通过egl_函数调用后,直接就能调用gl_函数去画图了,为何?难道在egl*函数调用过程中,已经将opengl相关实现的库加载了吗?涉及的库首先,由于涉及的库较多,先列出来(高通平台,原生的只有前4个),//算是android中的egl库,用来加载具体的实现system\lib\libEGL.so//opengl具体实现的wrappersystem\lib\libGLESv1_CM.sosystem\lib\libGLESv2.so//opengl软件实现,即aglsystem\li 阅读详情

相关推荐

GAMES101:MacOS作业环境搭建

查看gcc/clang的位置产看gcc/clang的版本1.1.2 安装cmake。

weixin_38844255的博客 716

js 基础 (ES 模块)

js 基础 (ES 模块)

chinusyan的专栏 3010

用Arduino Mega2560和TB6612驱动MG513电机,我踩过的坑和最佳实践

本文详细介绍了使用Arduino Mega2560和TB6612驱动模块控制MG513直流电机的实战经验,包括硬件连接、PWM配置、编码器信号处理等关键技巧。通过优化电源系统、信号线布局和软件控制算法,有效解决了电机抖动、转速不稳等常见问题,为机器人底盘和自动化项目提供了可靠解决方案。

weixin_42520573的博客 202

es6语法import()的使用

另外,import()函数与所加载的模块没有静态连接关系,这点也是与import语句不相同。import()类似于 Node.js 的require()方法,区别主要是前者是异步加载,后者是同步加载。上面代码中,引擎处理import语句是在编译时,这时不会去分析或执行if语句,所以import语句放在if代码块之中毫无意义,因此会报句法错误,而不是执行时错误。也就是说,import和export命令只能在模块的顶层,不能在代码块之中(比如,在if代码块之中,或在函数之中)。所以,下面的代码会报错。

逆袭的菜鸟X 1077

PaddleOCR多进程GPU推理实战:200万图片高效处理方案

本文详细介绍了PaddleOCR多进程GPU推理在高效处理200万张图片OCR任务中的实战方案。通过优化GPU利用率、多进程并发和关键参数调优,实现了从单进程3000张/小时到8进程3万张/小时的性能飞跃,为大规模OCR处理提供了可靠解决方案。

prometheus9mon的博客 261

实战指南(一)SCAPS-1D太阳能电池模拟软件从零到一:模型构建与参数解析

本文详细介绍了SCAPS-1D太阳能电池模拟软件的使用方法,从模型构建到参数解析,帮助用户快速掌握这一免费且功能强大的工具。特别适合用于单结/多结电池的电学性能分析,涵盖钙钛矿电池等常见结构的模拟实践,并提供参数调试和收敛性问题处理的实用技巧。

weixin_30588675的博客 445

前端知识汇总【ES系列之3解构赋值】

解构赋值

qq_44810886的博客 1688

飞牛fnNAS同步微信微信聊天记录

微信聊天记录如何备份到NAS?本文介绍了利用NAS虚拟机和同步工具实现微信记录自动备份的方法。通过在NAS上搭建"云电脑"长期运行微信PC端,并配置微力同步将聊天记录文件夹自动同步到NAS存储,解决了传统电脑备份的安全性问题。操作步骤包括:1)在NAS上安装虚拟机系统;2)登录微信PC端并同步手机记录;3)配置同步工具将微信记录文件夹同步到NAS。该方法尤其适合不常使用PC微信的用户,可实现记录永久保存和远程查看,更换手机时也能快速恢复历史记录。

dgnankai的专栏 4306

ES6学习(五)-- Module 语法

我们之前学习的都是将 虽然写在html 标签之前,但是却能推后执行。使用async 时,js 代码加载完毕但是DOM还未渲染完全就会出现访问时找不到节点的问题;defer 则是等到DOM 全部都渲染完毕之后再进行js 代码的执行,所以比较来说更靠谱一点。

2302_79523175的博客 1423

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

Robot_PLC_HMI_Automation 1万+

ROCm rocr-libhsakmt分析系列1-2:多GPU跨卡VRAM访问机制分析

本文基于ROCr-Runtime的libhsakmt库源码,深入分析了多GPU系统中跨设备内存访问的实现机制。主要内容包括: 实现流程概述:通过P2P拓扑发现、统一虚拟地址空间、页表映射和硬件转发四个步骤,实现零拷贝的跨GPU内存访问。

图形/计算GPU的驱动与虚拟化技术分享园地 2507

ES6语法之模块化(ES module)

es6 模块化

hb13141029的博客 1141

一根同轴线,真的扛得住 4K 吗? ——从摄像头带宽算起,聊透车载 SerDes 接口选型

如果你记住这三句话,这篇文章就值了:🎯摄像头带宽 = 分辨率 × 位深 × fps × 开销4K RAW 摄像头 ≈ 3.7Gbps,是现实不是理论SerDes 选型,宁可多留 20%,不要刚刚好。

weixin_43199439的博客 193

初学ES6笔记二十Module语法

本人的笔记内容来自于[阮一峰老师的ECMAScript 6 详细内容请看(http://es6.ruanyifeng.com/#docs/array) Module语法 一、概述 ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。 // CommonJS模块 let { stat, exists,...

weixin_44072887的博客 318

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

《二十》ES6+ 中的 Module

在 ES6 之前,为了让 JavaScript 支持模块化,社区涌现出了很多不同的模块化规范:AMD、CommonJS、CMD 等。但是目前,AMD 和 CMD 已经很少使用了。直到 ES6,ECMAScript 官方才推出了 JavaScript 的模块化方案 ES Module。ES Module 中使用 export 将当前模块的内容导出,使用 import 将其他模块的内容导入。ES Module 自动采用严格模式。

花铛 3304

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

初学ES6笔记二十一Module的加载实现

本人的笔记内容来自于[阮一峰老师的ECMAScript 6 详细内容请看(http://es6.ruanyifeng.com/#docs/array) Module的加载实现 一、浏览器加载 传统方法 HTML 网页中,浏览器通过浏览器是同步加载 JavaScript 脚本,即渲染引擎遇到两种异步加载的语法。 <script src="path/to/myModule.js" defer&g...

weixin_44072887的博客 233

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ES6学习笔记(二)(feat阮一峰ES6教程)

**内容简介:** 十二、Symbol 十三、Set 和 Map 数据结构 十四、Proxy 十五、Reflect 十六、Promise 对象 十七、Iterator 和 for...of 循环 十八、Generator 函数的语法 十九、Generator 函数的异步应用 二十、async 函数 二十一、Class 的基本语法 二十二、Class 的继承 二十三、Module 的语法 二十四、Module 的加载实现 二十七、异步遍历器

weixin_43995977的博客 861

vue.js学习笔记二十 九——export default与export的使用方式

1. ES6与Node中导入与暴露成员的方式 1.1 使用Node暴露与导入的方式 1.1.1 导入 在Node中使用 var 名称 = require('模块标识符'); 来导入成员 1.1.2 暴露成员 moudle.exports={} 和 exports来暴露成员 1.2 使用ES6方式暴露成员与导入模块 在ES6中,也通过规范的形式,规定了ES6中如何导入和导出模块 1....

武汉小喽啰 1万+

ES6 (二十三)Module 的语法、静态加载、export`和`import、export default、import动态加载

ES6 (二十三)Module 的语法、静态加载、export和import、export default、import动态加载 文章目录ES6 (二十三)Module 的语法、静态加载、export`和`import、export default、import动态加载1. 概述2. 严格模式3. export 命令4. import 命令5. 模块的整体加载6. export default 命令7. export 与 import 的复合写法8. 模块的继承9. 跨模块常量10. import()简介适

qq_43456781的博客 895

ES6新特性详细介绍,你都掌握了吗?

ES6 中 20 个新特性的详细介绍以及知识拓展,帮助理解这些特性的应用和优势。

I'm兰陵王的博客 1734

ES6 (二十四)Module 的加载实现、defer、async、CommonJS 模块、ES6模板、Node.js 的模块加载方法、package.json、循环加载

ES6 (二十四)Module 的加载实现、defer、async、CommonJS 模块、ES6模板、Node.js 的模块加载方法、package.json、循环加载 文章目录ES6 (二十四)Module 的加载实现、defer、async、CommonJS 模块、ES6模板、Node.js 的模块加载方法、package.json、循环加载1. 浏览器加载传统方法加载规则2. ES6 模块与 CommonJS 模块的差异3.✔ Node.js 的模块加载方法概述package.json 的 main

qq_43456781的博客 719

JavaScript进阶(二十六):ES各版本特性详解

ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,所以它可以理解为是JavaScript的一个标准,但实际上后两者是ECMA-262标准的实现和扩展。

IT全栈 华强工作室 4887

ES6标准入门略读笔记

编辑于2018年1月6日 一、let命令 1、let声明的变量只在其所在代码块内有效; 2、let声明的变量在声明前使用会报错ReferenceError; 3、暂时性死区; 4、let不允许在相同的作用域内重复声明同一个变量。 二、块级作用域 1、let外层代码块不受内层代码块的影响; 2、使用do表达式使块级作用域中的值能够返回。 三、const 1、const声明一个只读...

xydzjnq的博客 387

ES6 模块加载export 、import、export default 、import() 语法与区别,笔记总结 ...

ES6模块加载export 、import、export default 、import() 语法与区别在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。CommonJS 用于服务器,AMD 用于浏览器。ES6 在语言标准层面上,实现了模块功能,而且简单,完全可以取代 CommonJS 和 AMD 规范,成为浏...

weixin_34235135的博客 472

深入了解 Commonjs 和 Es Module

一 前言 今天我们来深度分析一下 Commonjs 和 Es Module,希望通过本文的学习,能够让大家彻底明白 Commonjs 和 Es Module 原理,能够一次性搞定面试中遇到的大部分有关 Commonjs 和 Es Module 的问题。 老规矩我们带上疑问开始今天的分析????????????: 1 Commonjs 和 Es Module 有什么区别 ? 2 Commonjs 如何解决的循环引用问题 ? 3 既然有了 exports,为何又出了 module.exports ? 既生瑜,何

开源世界 599

vue.js学习笔记二十 六——webpack中的babel

1. class class是一个关键词,在es6的语法中,用来实现ES6中面向对象编程的方式而提出来的 例如: class Person{ static info = {name:'张三',age:20}; } var p = new Person(); 注意: 在class定义之前,我们是怎么表示类的了?之前我们都是通过Function来定义一个类的...

武汉小喽啰 371
上一篇: webpack配置babel执行ES module语法
下一篇: JavaScript模块笔记(一)模块化由来
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值