最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • ES 6 系列十二:Module

    正文概述 掘金(小和山的菜鸟们)   2021-04-29   765

    前言

    在开始学习之前,我们想要告诉您的是,本文章是对阮一峰《ECMAScript6 入门》一书中 "Module" 章节的总结,如果您已掌握下面知识事项,则可跳过此环节直接进入题目练习

    • 什么是模块化 ?
    • import 命令和 export 命令分别有什么作用 ?
    • 如何模块整体加载
    • export default 命令有何作用 ?

    如果您对某些部分有些遗忘,?? 已经为您准备好了!

    学习链接

    Module 的学习

    汇总总结

    什么是模块化

    历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来

    ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。

    模块功能主要由两个命令构成:exportimportexport 命令用于规定模块的对外接口,import 命令用于输入其他模块提供的功能。

    export 命令

    • 输出变量
    // profile.js
    export var firstName = 'Michael'
    export var lastName = 'Jackson'
    export var year = 1958
    
    //等同于下列代码
    var firstName = 'Michael'
    var lastName = 'Jackson'
    var year = 1958
    
    export { firstName, lastName, year }
    

    上面代码是 profile.js 文件,保存了用户信息。ES6 将其视为一个模块,里面用 export 命令对外部输出了三个变量。

    • 输出函数或类(class)
    export function multiply(x, y) {
      return x * y;
    };
    
    通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名
    
    function v1() { ... }
    function v2() { ... }
    
    export {
      v1 as streamV1,
      v2 as streamV2,
      v2 as streamLatestVersion
    };
    

    import 命令

    // main.js
    import { firstName, lastName, year } from './profile.js'
    
    function setName(element) {
      element.textContent = firstName + ' ' + lastName
    }
    
    //import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,
    //必须与被导入模块(profile.js)对外接口的名称相同。
    
    • 如果想为输入的变量重新取一个名字,import 命令要使用 as 关键字,将输入的变量重命名。
    import { lastName as surname } from './profile.js'
    
    • import 命令输入的变量都是只读的,不允许在加载模块的脚本里面,改写接口。
    import { a } from './xxx.js'
    a = {} // Syntax Error : 'a' is read-only;
    
    // 但是如果a是一个对象,改写a的属性是允许的
    import { a } from './xxx.js'
    a.foo = 'hello' // 合法操作
    
    • import 后面的 from 指定模块文件的位置,可以是相对路径,也可以是绝对路径。如果不带有路径,只是一个模块名,那么必须有配置文件,告诉 JavaScript 引擎该模块的位置。
    import { myMethod } from 'util'
    //  util是模块文件名,由于不带有路径,必须通过配置,告诉引擎怎么取到这个模块。
    
    • import 命令具有提升效果,会提升到整个模块的头部,首先执行。

    模块的整体加载

    // circle.js
    
    export function area(radius) {
      return Math.PI * radius * radius
    }
    
    export function circumference(radius) {
      return 2 * Math.PI * radius
    }
    
    import * as circle from './circle'
    
    console.log('圆面积:' + circle.area(4))
    console.log('圆周长:' + circle.circumference(14))
    

    export default 命令

    // export-default.js
    export default function () {
      console.log('foo')
    }
    

    上面代码是一个模块文件 export-default.js,它的默认输出是一个函数。其他模块加载该模块时,import 命令可以为该匿名函数指定任意名字。

    // import-default.js
    import customName from './export-default'
    customName() // 'foo'
    

    题目自测

    一:关于 ES6 的 module 模块,下列说法错误的是?

    • A: 可以有效解决大型系统文件复杂的依赖问题
    • B: 使用 export 语句可以选择性地向外部暴露自己的属性或者方法
    • C: 使用 import 语句导入其他模块的属性或者方法
    • D: 目前大部分主流浏览器都支持 module 模块
    Answer

    Answer: D


    二:以下代码输出结果为()

    // module.js
    export default () => 'Hello world'
    export const name = 'Lydia'
    
    // index.js
    import * as data from './module'
    
    console.log(data)
    
    • A: { default: function default(), name: "Lydia" }
    • B: { default: function default() }
    • C: { default: "Hello world", name: "Lydia" }
    • D: Global object of module.js
    Answer

    Answer: A

    使用import*作为名称语法,我们从module.js归档到index.js将创建名为 data 的新对象文件。在module.js 文件有两个导出:默认导出和命名导出。默认导出是一个函数,它返回字符串“helloworld”,命名的导出是一个名为name的变量,该变量的值为字符串“Lydia”

    数据对象具有默认导出的默认属性,其他属性具有命名导出的名称及其相应值。


    三:简述 export 和 export default 的区别

    Answer

    export default的对象、变量、函数、类,可以没有名字。export的必须有名字 export default在一个模块中只能有一个,当然也可以没有。export在一个模块中可以有多个 export default对应的importexport有所区别:有default的导入不需要{}

    ES 6 系列的 Module,我们到这里结束啦,谢谢各位对作者的支持!你们的关注和点赞,将会是我们前进的最强动力!谢谢大家!


    起源地下载网 » ES 6 系列十二:Module

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元