ES6标准---【八】【学习ES6看这一篇就够了!!!】

目录

前言

export命令

输出变量

输出函数/类

export中的as别名

export必须一一对应

 export接口的响应性

 注意

import命令

import命令的语法

import命令里的as别名

import的只读性

import命令具有提升性

import的一些约定

import的静态执行

import的唯一执行性

模块的整体加载

方法一

方法二

注意

export default命令

export default语法

export default的另类输出

export与import的复合写法

跨模块常量

前言

ES6标准---【一】【学习ES6看这一篇就够了!!】_es6学习-CSDN博客

ES6标准---【二】【学习ES6看这一篇就够了!!】_es6中的includes-CSDN博客

ES6标准---【三】【学习ES6看这一篇就够了!!!】-CSDN博客

ES6标准---【四】【学习ES6标准看这一篇就够了!!!】_es6 有arguments 吗-CSDN博客

ES6标准---【五】【看这一篇就够了!!!】-CSDN博客

ES6标准---【六】【学习ES6标准看这一篇就够了!!!】-CSDN博客

ES6标准---【七】【学习ES6标准看这一篇就够了!!!】-CSDN博客

export命令

export命令用于规定模块的对外接口

一个模块是一个独立的文件,该文件内部的所有变量,外部无法获取

如果想要外部能够读取模块内部的某个变量(函数、类),就必须使用export关键字输出该变量(函数、类)

输出变量

// profile.js
// 第一种写法
export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;// profile.js
// 第二种写法
// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export { firstName, lastName, year };

在实际中,我们应优先使用第二种写法,这种写法可以一眼看出究竟输出了哪些变量

输出函数/类

输出函数/类直接export函数名/类名即可

function v1() { ... }
function v2() { ... }
export {v1,v2,v3};
  • 一个例子
// profile.js
function test1() {console.log("hello,this istest1");
}
export {test1};// 测试html
<body><script type="module">import {test1} from "./JS/profile.js"test1();</script>
</body>

效果:

export中的as别名

通常情况下,export输出的变量/函数/类,是它们的名字,但是也可以使用as关键字重命名

function v1() { ... }
function v2() { ... }
export {v1 as streamV1,v2 as streamV2,v2 as streamLatestVersion
};

使用as关键字,重命名v1v2函数的“对外接口名

  • 外部调用需要使用“对外接口名
  • 重命名后v2可以用不同的名字输出两次(但是调用两个“对外接口名”都是指v2函数)

export必须一一对应

export命令规定的是“对外接口名”,必须与模块内部的变量建立一一对应的关系

// 报错
export 1;
// 报错
var m = 1;
export m;// 三种正确的写法
// 方法一
export var m = 1;
// 方法二
var m = 1;
export {m};
// 方法三
var m = 1;
export {m as n};// 报错
function f() {}
export f;
// 正确
export function f() {};
// 正确
function f() {}
export {f};

 export接口的响应性

export语句输出的接口,与其对应的值是动态绑定关系(某个变量的值在export输出后,如果改变了值,那么外部接口调用的值也是改变的)

即:“通过该接口,可以取到模块内部实时的值

export var foo = 'bar';
setTimeout(() => foo = 'baz', 500);
  • 上面代码变量foo的值,在500ms之后变成baz下面是一个例子
// profile.js
export var data = 1;
setTimeout(() => data = 2,1000);// 测试html
<body><script type="module">import {data} from "./JS/profile.js"setInterval(() => console.log(data), 500);</script>
</body>

效果:

 注意

export命令(包括后面的import命令)可以出现在模块的任何位置,只要处于模块顶层就可以

如果处于块级作用域(if语句、for语句、函数等等),就会报错

function test() {import {data} from "./JS/profile.js" //报错
}

效果:

import命令

import命令用于接收. >
?" 
export命令定义了模块的对外接口后,其它JS/HTML文件就可以通过import命令使用这个模块

//profile.js
var x = 1,y = 2,z = 3;
export {x,y,z};//main.js
import {x,y,z} from "./JS/progile.js";
console.log("x+y+z =",x+y+z);

import命令的语法

import语法:

import {变量a,变量b...} from "url"

其中,url可以是:

  • 绝对路径
  • 相对路径

import命令里的as别名

importexport一样,允许对接收到的的输出接口(也叫import的输入接口)起一个别名

import {x as m} from "./JS/profile.js"; 
  • 起别名后,原先的名字不可以使用
import {x as m} from "./JS/profile.js";console.log(x);    //报错,as别名后,原先的名字不能使用
console.log(m);    //正确

import的只读性

import命令输入的“变量”、“函数”、“”都是只读的,不允许在外部修改它们的值

import {x as m} from "./JS/profile.js";
m = 10;    //报错,不允许在外部修改它的值
  • 但是如果变量是一个“对象”,改写变量的属性,是允许的
  • 尽管对象的属性可以改写,但是不建议这样做,不利于排错,因此全部归类为“只读的”是比较稳妥的办法

import命令具有提升性

import命令具有提升效果,会提升到整个模块的头部,首先执行

原因是:“import命令是编译阶段运行的,在代码运行之前

下面的代码不会报错,因为import命令具有提升效果

foo();
import { foo } from 'my_module';

import的一些约定

import的静态执行

import静态执行,所以不能使用表达式变量(即:只有在运行时才能得到结果的语法结构)

// 报错
import { 'f' + 'oo' } from 'my_module';
// 报错
let module = 'my_module';
import { foo } from module;
// 报错
if (x === 1) {import { foo } from 'module1';
} else {import { foo } from 'module2';
}

import的唯一执行性

如果多次重复加载相同的一个js文件”,那么只会执行一次,而不会执行多次

import { foo } from 'my_module';
import { bar } from 'my_module';
// 等同于
import { foo, bar } from 'my_module';

模块的整体加载

除了指定加载某个具体的值,我们还可以整体加载一整个js文件(类似于ES6以前使用script导入一整个js文件),用星号*】指定一个对象,所有js文件的输出值都在这个对象里面

例如,要整体导入一个“profile.js”文件,可以有两个方法

方法一

手动指定profile.js文件中所有的变量、函数、类

// profile.js
var a = 1;
function myFunction () {conosle.log("这里是myFunction()");
}
export {a,myFunction};//main.js 在这里加载这个模块
import {a,myFunction} from "./JS/profile.js";console.log("a的值为:",a);
myFunction();

方法二

使用星号*】导入

// profile.js
var a = 1;
function myFunction () {conosle.log("这里是myFunction()");
}
export {a,myFunction};//main.js 在这里加载这个模块
import * as profile from "./JS/profile.js";console.log("a的值为:",profile.a);
profile.myFunction();

注意

虽然使用星号整体导入一整个js文件并把这个文件赋值给一个对象,但是这个对象却不能添加、修改、删除属性,即这个对象是“只读的

下面的写法都是不允许的

import * as profile from "./JS/profile.js";//下面两行都是不允许的
profile.a = 2;
profile.otherFunction = function() {};

export default命令

使用import命令时,用户需要知道“输出接口名”,否则无法加载

为此,我们引入export default命令,使用该命令可以不必在意输出接口名”,直接上手!!

export default的默认输出是一个函数或变量

export default语法

export default function () {...};

export default 变量;

// profile.js
export default function () {console.log("这里是default function()");
}

其他模块加载该模块时,import命令可以为该匿名函数指定任意名字(自取)

// main.js
import importFunction from './JS/profile.js';
importFunction(); 

效果:

需要注意的是,导入默认函数,import后面不必再加“花括号

  • export default命令也可以用在非匿名函数前,不过此时非匿名函数名在外部是无效的,加载时,视同匿名函数加载
// export-default.js
export default function foo() {console.log('foo');
}
// 或者写成
function foo() {console.log('foo');
}
export default foo;

export default的另类输出

本质上,export default就是输出一个叫做“default”的变量或方法,然后系统允许你为它设置任意名字

因此,下面的写法是有效的

// modules.js
function add(x, y) {return x * y;
}
export {add as default};
// 等同于
// export default add;
// app.js
import { default as foo } from 'modules';
// 等同于
// import foo from 'modules';
  • export export后面不能跟变量声明语句
// 正确
export var a = 1;
// 正确
var a = 1;
export default a;
// 错误
export default var a = 1;
  • 我们可以直接将一个值直接写在export default之后
// 正确
export default 42;
// 报错
export 42;
  • export default也可以用来输出类
// MyClass.js
export default class { ... }
// main.js
import MyClass from 'MyClass';
let o = new MyClass();

export与import的复合写法

如果在一个模块之中,先输入后输出同一个模块import语句可以与export语句写在一起

export { foo, bar } from 'my_module';
// 可以简单理解为
import { foo, bar } from 'my_module';
export { foo, bar };

注意【重要】:

  •  foo和bar并没有被导入当前模块,只是相当于对外转发了这两个接口,导致当前模块不能直接使用“foo”和“bar”

模块的接口改名和整体输出,也可以用这种写法:

// 接口改名
export { foo as myFoo } from 'my_module';
// 整体输出
export * from 'my_module';

默认接口的写法:

转发默认接口,需要添加“花括号

export { default } from 'foo';

具名接口改为默认接口的写法:

export { es6 as default } from './someModule';
// 等同于
import { es6 } from './someModule';
export default es6;

默认接口改为具名接口:

export { default as es6 } from './someModule';

转发一整个js文件:

export * as ns from "mod";
// 等同于
import * as ns from "mod";
export {ns};

注意:使用“export *”会忽略default方法

跨模块常量

const声明的常量只在当前代码块有效,如果想设置跨模块的常量(即跨多个文件),或者说一个值要被多个模块共享,可以采用下面的写法:

// constants.js 模块
export const A = 1;
export const B = 3;
export const C = 4;
// test1.js 模块
import * as constants from './constants';
console.log(constants.A); // 1
console.log(constants.B); // 3
// test2.js 模块
import {A, B} from './constants';
console.log(A); // 1
console.log(B); // 3
  • 如果要使用的常量非常多,可以搭建一个专门的“constants”目录,将各种常量写在不同的文件里面,保存在该目录下:
// constants/db.js
export const db = {url: 'http://my.couchdbserver.local:5984',admin_username: 'admin',admin_password: 'admin password'
};
// constants/user.js
export const users = ['root', 'admin', 'staff', 'ceo', 'chief', 'moderator'];
  • 然后将这些文件输出的常量,合并在一个js文件里:
// constants/myindex.js
export {db} from './db';
export {users} from './users';
  • 使用的时候,直接加载这个js文件即可:
// script.js
import {db, users} from './constants/myindex.js';

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于SmartUpload组件实现文件上传功能的案例

SmartUpload组件简介 SmartUpload组件 专门用于实现文件上传及下载的免费组件SmartUpload组件特点 使用简单&#xff1a;编写少量代码&#xff0c;完成上传下载功能能够控制上传内容能够控制上传文件的大小、类型缺点&#xff1a;目前已停止更新服务 SmartUpload组件应用 单文…

【Java】多线程前置知识 初识Thread

多线程前置知识 & 初识Thread 冯诺依曼体系结构初步认识存储设备CPU指令 操作系统初识操作系统内核态和用户态 进程/任务进程是什么进程的管理进程的调度虚拟内存地址进程间的通信 线程线程的出现线程是什么线程可能出现的问题线程与进程的联系和区别 协程初识Thread类Thre…

Java lambda表达式的变量捕获

有人看到这个lambda表达式能够访问isQuit这个变量而且还是可以被修改的变量&#xff0c;就发出疑问了&#xff0c;之前不是说lambda不能不或变量吗&#xff1f; 1.规则 java的lambda表达式变量捕获规则只是针对于外部作用域的局部变量来说的&#xff01;&#xff01;&#xf…

Linux环境变量进程地址空间

目录 一、初步认识环境变量 1.1常见的环境变量 1.2环境变量的基本概念 二、命令行参数 2.1通过命令行参数获取环境变量 2.2本地变量和内建命令 2.3环境变量的获取 三、进程地址空间 3.1进程&#xff08;虚拟&#xff09;地址空间的引入 3.2进程地址空间的布局和理解 …

【机器学习】:深潜智能的底层逻辑、前沿探索与未来展望】

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在科技的浩瀚星空中&#xff0c;机器学习犹如一颗璀璨的新星&#xff0c;以其独特的魅力和无限潜力&#xff0c;引领着我们向智能的深处探索。今天&#xff0c;我们将一同踏上这场深度之旅&#xff0c;不仅解析…

pdf图片怎么提取出来?这6个pdf图片提取工具全搞定,值得推荐!

在我们的日常办公和学习中&#xff0c;pdf文件成为了信息传递的重要载体。然而&#xff0c;有时我们在pdf文档中发现一些精彩的图片&#xff0c;想将其提取出来供个人使用或分享给他人。无论是为了更灵活的处理&#xff0c;还是为了发送特定的图像&#xff0c;提取pdf中的图片都…

国产新港海岸NCS8622Type-C/DP1.4 to HDMI2.0 Converter

NCS8622是一款高性能低功耗的Type-C/DP1.4至HDMI2.0转换器&#xff0c;设计用于将USB Type-C源或DP1.4源连接到HDMI2.0。
 NCS8622集成了符合DP1.4标准的接收器和符合HDMI2.0标准的发射器。 此外&#xff0c;CC控制器用于CC通信以实现DP替代模式。
 DP接收器集成了HDCP 1.…

gazebo 仿真阶段性问题汇总二

目录 写在前面的话遇到的问题问题一&#xff1a;启动了多个 robot_state_publisher解决办法 问题二&#xff1a;rviz 启动报错解决办法 问题三&#xff1a;rviz 中 wheel 一直指向 base_link解决方法 问题四&#xff1a;摄像头和opencv坐标系的问题解决方法 问题五&#xff1a;…

Submariner 部署全过程

Submariner 部署全过程 部署集群配置 broker 集群&#xff1a; pod-cidr&#xff1a;11.244.0.0/16 service-cidr 11.96.0.0/12 broker 172.100.0.109 node 172.100.0.108 集群 1&#xff08; pve3 &#xff09;&#xff1a; pod-cidr&#xff1a;10.244.0.0/16 service-…

微信支付开发-支付工厂JsApi产品代码

一、JSAPI支付产品、APP支付产品、小程序支付产品流程图 二、H5支付产品、Native支付产品 三、工厂父类抽象类代码开发 <?php /*** 微信父类抽象类* User: 龙哥三年风水* Date: 2024/9/19* Time: 11:33*/ namespace Payment\WechatPay; abstract class WechatPaymentHandl…

翻页时钟 2.0-自动置顶显示,点击小时切换显示标题栏不显示标题栏-供大家学习研究参考

更新内容 自动置顶显示点击小时切换显示标题栏&#xff0c;&#xff08;显示标题栏后可移动时钟位置&#xff0c;鼠标拖动边框调整时钟大小&#xff09;不显示标题栏时&#xff0c;透明部分光标可穿透修正一个显示bu 下载地址&#xff1a; https://download.csdn.net/download…

一站式项目管理系统如何实现全链条数字化管理?

在当今数字化高速发展的时代&#xff0c;项目申报领域也面临着管理方式的革新挑战。从传统的人工管理到如今追求高效、精准的数字化管理模式转变&#xff0c;是行业发展的必然趋势。如启服云项目管理系统之类的出现&#xff0c;为项目申报管理带来了新的思路。 立项阶段的数字化…

假期学习笔记总结--iOS 自动释放池

iOS 自动释放池 https://juejin.cn/post/6844904094503567368#heading-23 ARC和MRC 苹果在 iOS 5 中引入了ARC&#xff08;Automatic Reference Counting&#xff09;自动引用计数内存管理技术&#xff0c;通过LLVM编译器和Runtime协作来进行自动管理内存。LLVM编译器会在编…

怎么把图片压缩变小?把图片压缩变小的八种压缩方法介绍

怎么把图片压缩变小&#xff1f;在当今这个信息高度共享的时代&#xff0c;图片不仅仅是简单的视觉元素&#xff0c;它们承载着我们的记忆、故事和创意。无论是旅行的风景、家庭的聚会&#xff0c;还是工作中的项目展示&#xff0c;图片都在我们的生活中扮演着不可或缺的角色。…

文达通从创业板、北交所转战港股:净利润下滑,资产负债率124%

《港湾商业观察》施子夫 8月13日&#xff0c;青岛文达通科技股份有限公司&#xff08;以下简称&#xff0c;文达通&#xff09;递表港交所获受理&#xff0c;联席保荐机构为山证国际、浤博资本。 在选择递表港交所前&#xff0c;文达通曾于新三板挂牌上市并且还曾尝试谋求创业…

智谱清影 -CogVideoX-2b-部署与使用,带你揭秘生成6s视频的极致体验!

文章目录 1 效果展示2 CogVideoX 前世今生3 CogVideoX 部署实践流程3.1 创建丹摩实例3.2 配置环境和依赖3.3 模型与配置文件3.4 运行4 遇到问题 1 效果展示 A street artist, clad in a worn-out denim jacket and a colorful bandana, stands before a vast concrete wall in …

产品:直播送礼延迟这么大,你就不能快点吗

先赞后看&#xff0c;南哥助你Java进阶一大半 其实抖音的实时音视频技术RTC&#xff0c;是来源于火山引擎RTC的支持&#xff0c;抖音、火山引擎、巨量引擎都属于字节旗下不同的业务板块。 我是南哥&#xff0c;一个Java学习与进阶的领路人。 相信对你通关面试、拿下Offer进入心…

俄罗斯电商Ozon实用运营工具推荐

想要在俄罗斯最大的跨境电商平台 Ozon 上大展拳脚&#xff0c;却对俄语感到无从下手&#xff1f;又或是担心难以把握俄罗斯市场的热点趋势&#xff1f;别担心&#xff01;在这篇文章中&#xff0c;我们将为你介绍一系列实用工具&#xff0c;涵盖翻译、运营和图片处理等方面&…

有源滤波器UAF42

有源滤波器模块&#xff0c;在电路板上同时实现了低通&#xff0c;高通&#xff0c;带通 滤波器&#xff0c;可选其一进行输出&#xff0c;并可通过改变滑变阻值&#xff0c;轻松调节其滤波器中心频率&#xff0c;Q值&#xff0c;通带增益等&#xff0c; 也可方便实现Butterwo…

深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这次目标本来要达到60%&#xff0c;但是却非常稳定的达到了40%&#xff0c;​&#x1f622;​​&#x1f622;​​&#x1f622;​​&#x1f622;​&am…