译ES6-模块化入门
ES6 模块系统在 ES6 之前,我们已经知道了 RequireJS,AngularJS 的依赖注入,以及 CommonJS,具体可以看笔者的上一篇文章《JS模块化历史简介》。当我们学习 ES6 的模块化,就会发现它的发展深受 CommonJS 的影响。通过这篇文章,我们将看到 export 和 import 语句,以及 ES6 模块是怎么与 CommonJS 模块兼容的。 严格模式在 ES6 模块系统中,严格模式是默认开启的。严格模式是语言从语法层面限制你使用一些不好的写法,所以它更严格(==)。它也让编译器更好地处理代码。下面是 MDN上关于严格模式的解释:严格模式 变量必须显式声明函数的形参必须有唯一的名称(否则会报语法错误)不能使用with给只读的属性赋值会报错像 00840 这样的八进制数字会报语法错误试图 delete 无法删除的属性会报错delete prop 会报语法错误,可以使用 delete global[prop]eval 不会在所在的词法作用域引入新的变量eval 和 arguments 不能被改变或赋值arguments 不会跟踪方法的参数变化arguments.callee 不再支持,会报 TypeErrorarguments.caller 不再支持,会报 TypeError传入方法内部的 this 不再被强制转换成 Objectfn.caller 和fn.arguments 不再支持保留关键字 protected,static ,interface 不能被绑定即使在 ES6 中严格默认是默认开启的,也推荐在每个模块中都使用 use strict 关键字。 让我们先来看下 export 关键字吧~ export在 CommonJS 中,导出模块可以用 module.exports 。从下面的代码可以看出,你可以导出任何值: module.exports = 1module.export = NaNmodule.exports = 'foo' module.exports = { foo: 'bar' } module.exports = ['foo', 'bar'] module.exports = function foo () {}像 CommonJS 模块一样,ES6 模块也是暴露 API 的文件。同样的,ES6 模块内部的声明只在模块内部有效。这就意味着,某个模块中的变量,如果没有被导出,在其他模块中就无法使用。 ...