大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了Promise的用法,下面我们一起来继续学习模块化:

JavaScript本身是不支持模块化的,只不过后来一些社区的大佬制定了一个模块规范,主要分为两种,一个是用于服务器的CommonJs,比如nodeJs中的require;另一个是用于客户端的AMD,比如requireJs。后来ES6提供了通用的模块化方案:
ES6专门提供了importexport这两个小可爱

小白:那么它们都是用来做什么的呢?怎么用的呢?
格格:首先要开启服务器,整个流程是在服务器下进行的,Apache也好,编辑器自带的也好;下面就让我们带着疑问一起来看一下:

export:它是用来定义模块的,可以导出对象、函数、类、字符串等等

// 1.js
export const a = 1; console.log(a); // 1.html <script type="module"> import './1.js'; </script> 

上面的这个例子中,这两个文件是在同一目录下,但是引入的时候前面要加上(./)当前路径,不加就会报错,别问我为什么,大概是甲鱼的臀部,下面来看一下导出多个对象的例子:

// 1.js
const a = 1;
let b = 2; function show(){ console.log(10); } export { a, b as c, show } show(); // 10 console.log(a); // 1 console.log(b); // 2 console.log(c); // c is not defined 因为在这个js里他还是b,只不过导出到另外一个文件里才叫c // 1.html <script type="module"> import {a,c,show} from './1.js'; show(); // 10 console.log(a); // 1 console.log(c); // 2 console.log(b); // b is not defined 已经将导入的b更名为c,所以这里叫c </script> 

上面的例子中可以将export导出的内容通过as进行更名

小白:import也可以有这样的操作么?
格格:那是必须的呀,他们都是一家子的,这可不能偏心啊

import导入的也可以通过as改名:

// 1.html
<script type="module"> import * as goto from './1.js'; // * 代表1.js中导出的全部的内容,但是不能直接输出*,必须改名 console.log(goto); // 整个json对象 console.log(goto.a); // 1 goto.show(); // 10 </script> 

导出的方式还有另外一种:export default {}
那么export和export default的区别就是:前者导出的东西需要在导入的时候加{},而后者则不需要

// 1.js
const a = 1;
const b = 2;
const c = 3;
export {a,b}
export default c;
// 1.html
<script type="module"> import c,{a,b} from './1.js'; // 同时导入export和export default的时候,必须把默认的放在前面 console.log(a,b,c); // 1 2 3 </script> 

另外,import除了以上特性之外,还有:
引入的路径既可以是相对路径也可以是绝对路径,还可以是网络路径,比如引入网上的jquery.js;
import还拥有提升特性,就像是var变量提升一样,在实行代码之前会被提到代码的顶部
import可以动态引入,但是import不能放入放到代码块哦

小白:什么是动态引入?
格格:动态引入其实就是基于promise语法,根据promise机制来实现动态引入,首先来看一个例子:

// 1.html
<script type="module"> import('./1.js').then(res =>{ console.log(res.a); // 1 }); </script> 

有了这种机制就可以实现按需加载,比如先载入jquery.js再使用jquery的方法,或者根据条件选择动态加载哪个模块;
关于模块还需要强调的一点就是它默认就是严格模式,也就是默认在顶部有一个‘use strict’

小白:什么是严格模式?
格格:所谓严格模式也就是改掉一些编程不好的习惯,可以理解为把一个山寨的土匪收编为正规军的感觉:

严格模式相关规定还是挺多的:

  • 变量必须声明后再使用
  • 函数的参数不能有同名属性,否则报错
  • 不能使用with语句
  • 不能对只读属性赋值,否则报错
  • 不能使用前缀0表示八进制数,否则报错
  • 不能删除不可删除的属性,否则报错
  • 不能删除变量delete prop,会报错,只能删除属性delete global[prop]
  • eval不会在它的外层作用域引入变量
  • eval和arguments不能被重新赋值
  • arguments不会自动反映函数参数的变化
  • 不能使用arguments.callee
  • 不能使用arguments.caller
  • 禁止this指向全局对象
  • 不能使用fn.caller和fn.arguments获取函数调用的堆栈
  • 增加了保留字(比如protected、static和interface)
  • 其中,尤其需要注意this的限制。ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this。

作者:苏日俪格
链接:https://www.jianshu.com/p/6c1b0e2b53c3
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/kelly-sunshine/p/10767791.html

深入浅出ES6教程模块化相关推荐

  1. es6在原生代码的用法_关于ES6的模块化

    历史上,JavaScript一直没有自己模块体系(module),无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 其他语言如java.python等都具备这项功能,唯独Javascr ...

  2. 深入浅出ES6(一):ES6是什么

    深入浅出ES6(一):ES6是什么 作者 Jason Orendorff ,译者 刘振涛 发布于 2015年6月5日 | http://www.infoq.com/cn/articles/es6-in ...

  3. [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  4. npm包管理工具与ES6官方模块化规范

    npm介绍 npm有两种含义 : 第一种: 包管理工具node package manager 第二种:npm网站代码托管平台 1.npm 全称node package manager 官方推出的包管 ...

  5. 【视频教程】Javascript ES6 教程39— ES6 ba

    在前面,我们一起学了前38节的内容,今天我们开始第39节的内容<ES6 Babel 简介>,希望对你有所帮助. 在这里,简单说明一下,这个系列的视频教程视均来源Youtube,一共有54个 ...

  6. 最详细ES6教程_变量的解构赋值

    最详细ES6教程_变量的解构赋值 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定 ...

  7. 【ES6 教程】第一章 新的ES6语法04—如何设置函数参数的默认值

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在本节教程中,我们将学习如何在 ES6 中处理 JavaScript 默认参数. TL;DR func ...

  8. 【ES6 教程】第一章 新的ES6语法03—使用const 关键字定义常量

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在本教程中,我们将学习如何使用 JavaScript const 关键字定义常量. JavaScrip ...

  9. 【ES6 教程】第四章 ES6类04—如何定义与类关联的方法

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在今天的文章中,我们将一起来学习 JavaScript 静态方法以及如何有效地使用它们. JavaSc ...

最新文章

  1. 会汇编语言再学c语言,只有C语言功底的我学习汇编语言可以吗?
  2. python迭代器和生成器_Python之迭代器和生成器
  3. JUnit3 一次运行多个测试类和进行多次重复测试:使用测试套件和RepeatedTest
  4. l360废墨收集垫清零_知识分享003:EPSON L360打印机出现故障-废墨计数清零
  5. 通过windows客户端访问
  6. asp.net MVC 验证错误信息本地化
  7. 知我者谓我心忧 不知我者谓我何求
  8. 学习pathon的几大步骤
  9. SQL的select 语句的执行顺序
  10. 这个“中台”不简单,将自然资源信息化全面带入三维世界
  11. 怎么可以修改pr基本图形中的文字_PR教程03 | 如何增加字幕
  12. 错误解决:failed calling webhook “dec-autonomy.xxx.io“: failed to call webhook:post
  13. unity shader学习---光照模型(二)
  14. 根据16进制输出所有汉字
  15. C语言经典游戏代码大全(珍藏版)
  16. SAS杂谈--001--如何配置使用增强编辑器
  17. 你的灵魂画作都去哪儿了?“猜画小歌”背后的5000万组数据
  18. 三年白干!程序员孙某因违反《竞业协议》赔偿腾讯 97.6 万元,返还 15.8 万元...
  19. 基于 TI Sitara系列 AM64x核心板——程序自启动说明
  20. 基于MVC的GUI矩形面积求解

热门文章

  1. ASP.net Web API综合示例
  2. javascript笔记整理(数据类型强制/隐式转换 )
  3. [蓝桥杯历届试题] 海盗比酒量
  4. ubuntu 下重装mysql若干问题
  5. javascript 函数整理
  6. ASP.NET备份恢复SqlServer数据库
  7. Facebook AI牛津提出带“轨迹注意力”的Video Transformer,在视频动作识别任务中性能SOTA!...
  8. KD-VLP:知识蒸馏和预训练还能这么结合?上科大IntelMSRA提出基于知识蒸馏的端到端多模态预训练模型...
  9. python入门难?几个练习实例 全会就入门了
  10. Python 超简单一键美化你的文章