ES6之Module的语法(1)

1.概述

CommonJS 和 AMD 模块,都只能在运行时确定这些东西。比如,CommonJS 模块就是对象,输入时必须查找对象属性
这里写图片描述

上面代码的实质是整体加载fs模块(即加载fs的所有方法),生成一个对象(_fs),然后再从这个对象上面读取3个方法(因为CommonJS是从运行完成后的module.exports中加载的,所以只能在运行时确定这些东西,而不是像ES6那样在静态的时候才确定)。这种加载称为“运行时加载”,因为只有运行时才能得到这个对象,导致完全没办法在编译时做“静态优化”

ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入
这里写图片描述

上面代码的实质是从fs模块加载3个方法,其他方法不加载。这种加载称为“编译时加载”或者静态加载,即 ES6 可以在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高

综上:CommonJS是先加载整体,然后从整体中取出想要的方法。而ES6是直接加载模块指定输出的方法,其余方法不加载。CommonJS是require,ES6是export&import

2.ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this

3.export命令

export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能

一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。
这里写图片描述

注意:这里变量之前必须带有标识符var,否则会报错

export的另外一种写法
这里写图片描述

export命令除了输出变量,还可以输出函数或类(class)
这里写图片描述

export输出的变量就是本来的名字,但是可以使用as关键字重命名
这里写图片描述
这里本来输出函数本来的名字v1和v2,然后通过as关键字对其进行了重新命名

需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系
这里写图片描述

上面两种写法都会报错,因为没有提供对外的接口。第一种写法直接输出1,第二种写法通过变量m,还是直接输出1。1只是一个值,不是接口。正确的写法是下面这样
这里写图片描述

上面三种写法都是正确的,规定了对外的接口m。其他脚本可以通过这个接口,取到值1。它们的实质是,在接口名与模块内部变量之间,建立了一一对应的关系

同样的,function和class的输出,也必须遵守这样的写法
这里写图片描述

另外,export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值

这里写图片描述

上面代码输出变量foo,值为bar,500毫秒之后变成baz

最后,export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错
这里写图片描述
上面代码中,export语句放在函数之中,结果报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更改文件和目录(及子目录)的拥有者

当你想更改一个文件或目录(及子目录)的拥有者,可以使用下面的命令: chmod -R zcm:zcm /home/zcm/* 将home/zcm/ 下的所有文件的拥有者改为zcm,所属组为zcm. 不过,要执行chmod权限,可能会需要r…

转:Node.js和testacular的安装与配置

yuanwen:http://jishu.zol.com.cn/4881.html /** * 这个问题起源于testacular的尝试,也算是顺便给我学习Node.js开了一个头。 * 在次记录安装步骤以及安装过程中遇到的问题,备忘! **/ 1、安装Node.js 官方地址:http://nodejs.org/…

ES6之Module的语法(2)

4.import命令 使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块 上面代码的import命令,用于加载profile.js文件,并从中输入变量。import命令接受一对大括号,里面指定要从其他模块导入的…

ISA系列之三:ISA Server 2004防火墙的基本配置

3&#xff0e;1 防火墙策略的组成<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />在ISA服务器安装成功后&#xff0c;其防火墙策略默认为禁止所有内外通讯&#xff0c;所以我们需要在服务器上建立相应的防火墙策略&#xff0c…

太极

昨天&#xff0c;学了一点太极&#xff0c;也让我终于明白&#xff0c;书本代替不了的所谓的口传心授。 桩功&#xff1a; 手掌向前&#xff0c;最后腰也有前倾&#xff0c;背和臀部的后和手的前伸成为一个对比&#xff0c; 臀部的下和头顶的上&#xff0c;成为一个互拉 可以通…

linux下修改主机名

我用的是Fedora12系统&#xff0c;默认情况下&#xff0c;主机名是&#xff1a;localhost.localdomain&#xff0c;这个名字真是太难看了&#xff0c;于是就想着修改一下主机名。 在网上搜索了下&#xff0c;有好几种方法&#xff0c;我就不多说了&#xff0c;我只介绍我自己最…

ES6之Module的语法(3)

7.export 与 import 的复合写法 如果在一个模块之中&#xff0c;先输入后输出同一个模块&#xff0c;import语句可以与export语句写在一起 模块的接口改名和整体输出&#xff0c;也可以采用这种写法 默认接口的写法如下 具名接口改为默认接口的写法如下 因为默认是…

到了新公司

由于原公司撤资&#xff0c;今天是新公司的第一天上班&#xff0c;希望自己能走好&#xff1a;&#xff09; 转载于:https://www.cnblogs.com/treeyh/archive/2008/04/21/1164709.html

group by的使用

在sql语句中经常用到group by&#xff0c;但是对其并不是太了解&#xff0c;所以记录下来&#xff1a; select A,cout(*) 数量 from table_name group by A; group by 的使用有一条原则&#xff0c;那就是select 后面的所有列中没有使用聚合函数到必须出现在group by 后面。 那…

定时关机,适用于windows系统

命令&#xff1a; at 23:00:00 shutdown -s

ES6之Module 的加载实现(1)

1.浏览器加载 1.1传统方法&#xff1a; 在 HTML 网页中&#xff0c;浏览器通过<script>标签加载 JavaScript 脚本 默认情况下&#xff0c;浏览器是同步加载 JavaScript 脚本&#xff0c;即渲染引擎遇到<script>标签就会停下来&#xff0c;等到执行完脚本&…

c#同类型操作最终得到的结果将是同类型

例&#xff1a;decimal a (decimal) ( 1 / 2 ); //a的值是 0declmal b (decimal) ( (decimal)1 / (decimal)2 ) //b的值是0.5 转载于:https://www.cnblogs.com/lswweb/archive/2008/04/22/1165336.html

不断尝试,终能到达彼岸

不断尝试&#xff0c;终能到达彼岸 看山是山&#xff0c;看水是水&#xff1b;看山不是山&#xff0c;看水不是水&#xff1b;看山还是山&#xff0c;看水还是水。——佛家中人生三大境界 最近有一个用django开发的项目需要部署&#xff0c;项目用到了djangorestfulframework&a…

ES6之Module 的加载实现(2)

3.Node 加载 Node 对 ES6 模块的处理比较麻烦&#xff0c;因为它有自己的 CommonJS 模块格式&#xff0c;与 ES6 模块格式是不兼容的。目前的解决方案是&#xff0c;将两者分开&#xff0c;ES6 模块和 CommonJS 采用各自的加载方案 3.1在静态分析阶段&#xff0c;一个模块脚本…

Linux tail 命令详解

用途从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件&#xff0c;tail -f filename会把filename里最尾部的内容显示在屏幕上&#xff0c;并且不但刷新&#xff0c;使你看到最新的文件内容。语法标准语法tail [ -f ] [ -c Number | -…