深入理解ES6之《用模块封装代码》
什么是模块
模块是自动运行在严格模式下并且没有办法退出运行的Javascript代码
- 在模块的顶部this的值是undefined
- 其模块不支持html风格的代码注释
除非用default关键字,否则不能用这个语法导出匿名函数或类
任何未显示导出的变量、函数或类都是模块私有的,无法从模块外部访问
import {identifier1,identifier2} from './example.js'
import大括号表示给定模块导入的绑定,文件必须把文件扩展名也加上扩展名
导入绑定的列表看起来与解构对象很相似,但它不是
当从模块中导入一个绑定时,它就好像使用const定义的一样
不管是在import语句中把一个模块写了多少次,该模块将只招待一次。导入模块的代码执行后,实例化过的模块被保存在内存中,只要另一个import语句引用它就可以重复使用它
export和import的一个重要的限制是它们必须在其它语句和函数之外使用,也就是说不允许出现在if语句中,不能有条件导出或以任何方式动态导出。模块语法存在的一个原因是让js引擎静态确定哪些可以导出,因此只能在模块顶部使用export
export、import都可以用as来重命名导出的函数名
为默认导出值指定标识符指定重命名语法:
function sum(num1, num2) {
return num1 + num2
}
//export default sum
export { sum as default }
看下面这个例子:
export let color = 'red'
export default function (num1, num2) {
return num1 + num2
}
import sum,{color} from './example.js'
import 和export 组合使用
export {sum as add } from './example.js'
<script type="module"执行时自动应用defer属性,模块文件开始下载,直到文档被完全解析模块才会执行,模块按照它们出现在html文件中的顺序执行
async属性也可以应用在模块上,async属性会让模块以类似于脚本的方式执行,唯一的区别是在模块执行前,模块中所有的导入资源必须下载下来,这可以确保只有当模块招待所需的所有资源都下载完成后才执行模块,但不能保证是模块的招待时机
浏览器模块说明符解析
- 以/开头的解析为以根目录开始
- 以./开头的解析为以当前目录开始
- 以../开头的解析为从父目录开始
深入理解ES6之《用模块封装代码》的更多相关文章
- 《深入理解ES6》笔记——扩展对象的功能性(4)
变量功能被加强了.函数功能被加强了,那么作为JavaScript中最普遍的对象,不加强对得起观众吗? 对象类别 在ES6中,对象分为下面几种叫法.(不需要知道概念) 1.普通对象 2.特异对象 3.标 ...
- 深入理解 ES6中的 Reflect
阅读目录 一:Reflect.get(target, name, receiver) 二:Reflect.set(target,name,value,receiver) 三:Reflect.apply ...
- ES6的promise对象研究
ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...
- ES6正则表达式扩展
前面的话 正则表达式是javascript操作字符串的一个重要组成部分,但在以往的版本中并未有太多改变.然而,在ES6中,随着字符串操作的变更, ES6也对正则表达式进行了一些更新.本文将详细介绍ES ...
- ES6函数扩展
前面的话 函数是所有编程语言的重要组成部分,在ES6出现前,JS的函数语法一直没有太大的变化,从而遗留了很多问题和的做法,导致实现一些基本的功能经常要编写很多代码.ES6大力度地更新了函数特性,在ES ...
- ES6数组扩展
前面的话 数组是一种基础的JS对象,随着时间推进,JS中的其他部分一直在演进,而直到ES5标准才为数组对象引入一些新方法来简化使用.ES6标准继续改进数组,添加了很多新功能.本文将详细介绍ES6数组扩 ...
- ES6数字扩展
前面的话 本文将详细介绍ES6数字扩展 指数运算符 ES2016引入的唯一一个JS语法变化是求幂运算符,它是一种将指数应用于基数的数学运算.JS已有的Math.pow()方法可以执行求幂运算,但它也是 ...
- ES6,扩展运算符的用途
ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性. 扩展运算符就是三个点“...”,就是将实现了Iterator 接口的对象 ...
- 理解 ES6 Generator-next()方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 前端知识体系:JavaScript基础-原型和原型链-理解 es6 中class构造以及继承的底层实现原理
理解 es6 中class构造以及继承的底层实现原理 原文链接:https://blog.csdn.net/qq_34149805/article/details/86105123 1.ES6 cla ...
随机推荐
- (三)目标检测算法之SPPNet
今天准备再更新一篇博客,加油呀~~~ 系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-C ...
- LeetCode-063-不同路径 II
不同路径 II 题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角( ...
- 华为交换机ACL如何使用及原则
华为交换机ACL如何使用及原则 转载自:辣条①号 源链接:https://boke.wsfnk.com/archives/480.html ACL(访问控制列表)的应用原则:标准ACL,尽量用在 ...
- CF772D题解
什么阴间十进制状压 题意:给定 $ n $ 数字,求定义函数 $ G(x) $ 能够表示 满足"十进制按位与为 $ x $"的集合的平方和之和乘上 \(x\),求 \(\bigop ...
- min_25 筛学习小记
min_25筛 由 dalao min_25 发明的筛子,据说时间复杂度是极其优秀的 \(O(\frac {n^{\frac 3 4}} {\log n})\),常数还小. 1. 质数 \(k\) 次 ...
- LGP7884题解
是的,这是一篇使用 min25 筛的题解... 本题解参考command_block大佬的博客,代码是对其在 LOJ 上的提交卡常后写出来的. ML 板子把数据开到 \(10^{13}\) 速度还和供 ...
- git命令新建远程分支并推送,切换远程地址
最近记性不好,老是忘记操作命令,记录下一下新建远程分支和切换.删除远程地址的命令: 1.查看当前分支: git branch 2.查看所有分支:git branch -a 3.切换分支:git ch ...
- 74CMS 3.0 CSRF漏洞
一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...
- Java Study two
由于前段时间再做.NET 项目没做更新,今天简单的学习java项目的新建和入门的学习 今日目标 基础语法了解 新建第一个java项目 新建第一个项目Class ->HelloWorld 运行并输 ...
- linux命令管道工作原理与使用方法
一.管道定义 管道是一种两个进程间进行单向通信的机制.因为管道传递数据的单向性,管道又称为半双工管道.管道的这一特点决定了器使用的局限性.管道是Linux支持的最初Unix IPC形式之一,具有以下特 ...