JavaScript module导出和导入的介绍(详解)

本篇文章给大家带来的内容是关于javascript module导出和导入的介绍(详解),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

最近看了些Vue框架写的程序,发现自己的前端知识还停留在几年以前,发现现在Javascript程序里有各种各样的对module的导入和到处,导入乍一看跟python的语法挺像的无非就是把from和import这两个关键词的使用颠倒了一下顺序。仔细看下来还是和python挺不一样的import模块的前提是模块有导出,并且还分默认导出和命名导出,有些麻烦。所以今天这篇文章就把所有的export形式和相应的import使用汇总一下。

ES6在语言标准的层面上,实现了模块功能,成为浏览器和服务器通用的模块解决方案,完全可以取代 CommonJS 和 AMD 规范,基本特点如下:

每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件,直接从内存中读取;

每一个模块内声明的变量都是局部变量, 不会污染全局作用域;

立即学习“Java免费学习笔记(深入)”;

模块内部的变量或者函数可以通过export导出;

一个模块可以导入别的模块

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

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

var year = '2018';var month = 'Febuary';export {year, month};

登录后复制

export 导出模块

export语法声明用于导出函数、对象、指定文件(或模块)的原始值。 有两种模块导出方式:命名式导出(名称导出)默认导出(定义式导出),命名式导出每个模块可以有多个,而默认导出每个模块仅一个 。

命名式导出

模块可以通过export前缀关键词声明导出对象,导出对象可以是多个。这些导出对象用名称进行区分,称之为命名式导出

export { func }; // 导出一个已定义的函数funcexport const foo = Math.sqrt(100); // 导出一个常量

登录后复制

我们可以使用*和from关键字来实现的模块的继承:

export * from 'base_module';

登录后复制

模块导出时,可以指定模块的导出成员。导出成员可以认为是类中的公有成员,而非导出成员可以认为是类中的私有成员:

var name = 'Kevin的居酒屋';var domain = 'http://coffee.toast.com'; export {name, domain}; // 相当于导出{name:name,domain:domain}

登录后复制

模块导出时,我们可以使用as关键字对导出成员进行重命名,上面的导出可以这样写:

export {name as siteName, domain}

登录后复制

注意一下语法错误:

export 1; var a = 100;export a;

登录后复制

export在导出接口的时候,必须与模块内部的变量具有一一对应的关系。直接导出1没有任何意义,也不可能在import的时候有一个变量与之对应export a虽然看上去成立,但是a的值是一个数字,根本无法完成解构,因此必须写成export {a}的形式。即使a被赋值为一个函数,也是不建议使用上面的形式导出的因为大部分风格都建议,模块中最好在末尾用一个export导出所有的接口,就像上面那些例子一样。

默认导出

默认导出也被称做定义式导出。命名式导出可以导出多个值,但在import引用时,也要使用相同的名称来引用相应的值。默认导出只有导出一个单一值,这个输出可以是一个函数、类或其它类型的值,这样在模块import导入时也会更    容易引用。

export default function() {}; // 导出一个函数export default class(){}; // 导出一个类

登录后复制

默认导出可以理解为另一种形式的命名导出,默认导出可以认为是使用了default名称的命名导出。

下面两种导出方式是等价的:

const D = 123; export default D;export { D as default };

登录后复制

使用名称导出一个模块时:

// "my-module.js" 模块function cube(x) {    return x * x * x;}const foo = Math.PI + Math.SQRT2;export { cube, foo };

登录后复制

在另一个模块(js文件)中,我们可以像下面这样引用:

import { cube, foo } from 'my-module';console.log(cube(3));console.log(foo);

登录后复制

使用默认导出一个模块时:

// "my-module.js"模块export default function (x) {return x * x * x;}

登录后复制

在另一个模块中,我们可以像下面这样引用,相对名称导出来说使用更为简单:

import cube from 'my-module';console.log(cube(3)); // 27

登录后复制

import导入模块

import语法声明用于从已导出的模块、脚本中导入函数、对象、指定文件(或模块)的原始值。import模块导入与export模块导出功能相对应,也存在两种模块导入方式:命名式导入(名称导入)和默认导入(定义式导入)。

注意事项: import必须放在文件的最开始,且前面不允许有其他逻辑代码,这和其他所有编程语言的导入风格一致。

命名导入

我们可以通过指定名称将导入成员插入到当作用域中。可以导入单个成员或多个成员:

注意,花括号里面的变量与export后面的变量一一对应

import {myMember} from "my-module";import {foo, bar} from "my-module";

登录后复制

通过*符号,我们可以导入模块中的全部属性和方法。当导入模块全部导出内容时,就是将导出模块(’my-module.js’)所有的导出绑定内容,插入到当前模块(’myModule’)的作用域中:

import * as myModule from "my-module";

登录后复制

默认导入

在模块导出时,可能会存在默认导出。同样的,在导入时可以使用import指令导入这些默认值。直接导入默认值:

import defaultName from "my-module";import myDefault, {foo, bar} from "my-module"; // 指定成员导入和默认导入

登录后复制

default关键字

// my-module.jsexport default function() {} // 等效于:function func() {};export {func as default};

登录后复制

在import的时候,可以这样用:

import a from './my-module'; // 等效于,或者说就是下面这种写法的简写import {default as a} from './my-module';

登录后复制

这个语法糖的好处就是import的时候,可以省去{}。

简单的说,如果import的时候,你发现某个变量没有花括号括起来(没有*号),那么你在脑海中应该把它还原成有花括号的{default as …}语法,所以import $,{each,map} from ‘jquery’;import后面第一个$是{default as $}的替代写法。

以上就是JavaScript module导出和导入的介绍(详解)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2732871.html

(0)
上一篇 2025年3月8日 00:49:47
下一篇 2025年3月8日 00:49:56

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript中typeof与instanceof之间的区别介绍(代码示例)

    本篇文章给大家带来的内容是关于javascript中typeof与instanceof之间的区别介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 JavaScript 中typeof 和 instanceof…

    编程技术 2025年3月8日
    100
  • JavaScript中比较两个对象是否相等的方法

    本篇文章给大家带来的内容是关于JavaScript中比较两个对象是否相等的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 这是我在一次面试中,被面试官所提问的一道题 在这次面试题中 相等:指的是对象的属性个数值相等 有…

    编程技术 2025年3月8日
    200
  • javascript能做什么

    javascript能做的有:1、使网页更具交互性,给站点的用户提供更好体验;2、可以创建活跃的用户界面;3、确保用户以表单形式输入有效的信息;4、可以创建定制的HTML页面;5、可以处理表单,设置cookie。 一:什么是js JavaS…

    2025年3月8日
    200
  • Javascript中编码规范的介绍(代码示例)

    本篇文章给大家带来的内容是关于javascript中编码规范的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 命名规范 标准变量采用驼峰式命名 ‘ID’在变量名中全大写 常量全大写,用下划线连接构造函数,大…

    编程技术 2025年3月8日
    200
  • import提升导致Fundebug报错的解决方法(详细)

    本篇文章给大家带来的内容是关于import提升导致fundebug报错的解决方法(详细),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 摘要: 解释一下“请配置apikey”报错的原因。 部分Fundebug用户使用imp…

    编程技术 2025年3月8日
    200
  • Vue2.6中的nextTick方法分析

    本篇文章给大家带来的内容是关于vue2.6中的nexttick方法分析),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 浅析 Vue 2.6 中的 nextTick 方法。 事件循环 JS 的 事件循环 和 任务队列 其实…

    编程技术 2025年3月8日
    200
  • JavaScript基础数据的梳理

    本篇文章给大家带来的内容是关于javascript基础数据的梳理,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 看了一些资料,结合ES6、高程和MDN,对JS核心知识点进行了梳理。由于篇幅有限,这里只对我认为重要的知识做了…

    编程技术 2025年3月8日
    200
  • JavaScript中作用域链与执行环境的介绍(图文)

    本篇文章给大家带来的内容是关于JavaScript中作用域链与执行环境的介绍(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 每一个函数存在一个[[Scope]]内部属性,包含了一个函数被创建得作用域中对象得集合,这…

    2025年3月8日
    200
  • nodejs实现webservice的问题分析

    本篇文章给大家带来的内容是关于nodejs实现webservice的问题分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 库,工具 node-soapsoapui 创建 注意args里参数顺序 const soap = …

    2025年3月8日 编程技术
    200
  • react路由的简单用法(代码示例)

    本篇文章给大家带来的内容是关于react路由的简单用法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 我要的是简单粗暴的路由 习惯了 vue-router 路由的用法,再用react-router总感觉挺麻烦的…

    2025年3月8日 编程技术
    200

发表回复

登录后才能评论