首页 > 其他分享 >ES6 module模块

ES6 module模块

时间:2023-10-17 15:34:16浏览次数:36  
标签:ES6 console log age module js export 模块


概述
ES6中的module指的是JavaScript模块化规范中的一种。它通过export和import语法来导出和导入模块中的变量、函数、类等内容。

使用ES6模块化的好处包括:解决了模块化的问题。消除了全局变量。管理加载顺序。

使用
在ES6模块中,一个文件代表一个模块
当使用script标签加载模块时,需要加type="module"。
export命令用于导出内容。
import命令用于导入内容。

export default 和 import

  • 一个模块只能有一个export default。
  • 相同内容的import命令只会执行一次。
方式一:导出变量
// module.js
const age = 18;
export default age;

 import age from "./module.js";
 console.log(age); //18

等价于

// module.js

export default 18;

import age from "./module.js";
console.log(age); //18

方式二:导出方法
// module.js
function sayHello() {
  console.log("hello");
}
export default sayHello;

  import sayHello from "./module.js";
  sayHello();

等价于:

// module.js

export default function () {
console.log("hello");
}

import sayHello from "./module.js";
sayHello();

方式三:导出对象
// module.js

let user = { name: "小明", age: 18 };
export default user;

import user from "./module.js";
console.log(`${user.name}今年${user.age}岁`);

等价于:

// module.js

export default { name: "小明", age: 18 };

import user from "./module.js";
console.log(`${user.name}今年${user.age}岁`);

别名

导出别名:
// module.js let name = "小明"; let age = 18; function sayHello() { console.log("hello"); } export { name as name2, age as age2, sayHello as sayHello2 };

import { name2, age2, sayHello2 } from "./module.js";
console.log(name2); //小明
console.log(age2); //18
sayHello2(); //hello

 

导入别名:

// module.js

let name = "小明";
let age = 18;
function sayHello() {
console.log("hello");
}
export { name, age, sayHello };import {name as name2,age as age2,sayHello as sayHello2,} from "./module.js";

console.log(name2); //小明
console.log(age2); //18
sayHello2(); //hello

整体别名:

// module.js

let name = "小明";
let age = 18;
function sayHello() {
console.log("hello");
}
export { name, age, sayHello };

import * as obj from "./module.js";
console.log(obj.name); //小明
console.log(obj.age); //18
obj.sayHello(); //hello

export default 和 export混用

// module.js

let name = "小明";
let age = 18;
function sayHello() {
  console.log("hello");
}
export { name, age, sayHello };
export default "北京市";

import address from "./module.js";
import { name, age, sayHello } from "./module.js";
console.log(address); //北京市
console.log(name); //小明
console.log(age); //18
sayHello(); //hello

等价于:

// export default必须放在前面
import address, { name, age, sayHello } from "./module.js";
console.log(address); //北京市
console.log(name); //小明
console.log(age); //18
sayHello(); //hello

this指向问题

  • 在js中,顶层的this指向window对象。
  • 模块中,顶层的this指向undefined。、、
// module.js

console.log(this);

<script src="./module.js"></script>
<script src="./module.js" type="module"></script>

打印输出:

 

import 和 import()

// mobile.js

export default "这是移动端";

// mobile.js

export default "这是移动端";

let isPc = true;
if (isPc) {
    import("./pc.js").then((module) => {
        console.log(module.default);
    });
} else {
    import("./mobile.js").then((module) => {
        console.log(module.default);
    });
}

 

导入导出复合写法

// module1.js

export const age = 18;

// module1.js

export const age = 18;

import { age } from "./module2.js";
console.log(age); //18

module2.js可简写为:

// module2.js

export { age } from "./module1.js";

 

模块的继承

//base.js

let name = "Tom";
let age = 28;
let address = "beijing";

export { name, age, address }

//children.js

export * from "./base.js"
export function sayHello() {
    console.log("sayHello");
};

<script type="module">
    import * as myobj from "./js/children.js";

    console.log(myobj.name, myobj.age, myobj.address);
    myobj.sayHello();
</script>

//Tom 18 beijing
//sayHello

module加载的本质

ES6模块的运行机制是这样的:当遇到import命令时,不会立马去执行模块,而是生成一个动态的模块只读引用,等到需要用到时,才去解析引用对应的值。

由于ES6的模块获取的是实时值,就不存在变量的缓存。

//export1.js
export let count = 1;
export function add() {
    count++;
}

<img id="myImg">
<script type="module">
    import {count,add} from "./js/export1.js";
    console.log(count); //1
    add();
    add();
    console.log(count); //3
</script>

 

标签:ES6,console,log,age,module,js,export,模块
From: https://www.cnblogs.com/zha-hdlxdl/p/17769832.html

相关文章

  • BOSHIDA AC/DC电源模块工作效率的特点
    BOSHIDAAC/DC电源模块工作效率的特点AC/DC电源模块是一种用来将交流电转换为直流电的设备,在各种电子设备中应用广泛。其中,工作效率是评价AC/DC电源模块性能的关键指标之一。下面将从工作效率的特点方面进行阐述,以帮助读者更好地理解AC/DC电源模块的工作原理和性能。 1.高效......
  • fastify-autoload + ncc + s3 实现模块的插件化开发加载
    以前简单说明过基于fastify-autoload的插件化加载fastify插件,方便实现开发,但是对于实际生产环境我们可以需要频繁的模块修改,发布以及构建,所以需要我们需要频繁的调整,不是很方便,我们可以基于ncc进行入口的打包,同时对于每个插件也基于ncc打包为独立的文件,这样我们开发的插件只需......
  • C2000 系列DSP使用Syscfg配置CLB模块记录
    1.1、SysConfig配置1、在工程下新建一个syscfg文件。注意文件的后缀名是.syscfg,命名任意。这时候会弹出一个弹窗,点击yes将SysConfig添加到该工程的toolchain。2、可以看到工程下多了一个GeneratedSource,并且打开工程属性,Build下也新加了SysConfig......
  • orchard core 搭建cms 加载其他模块的管理1
    有一个具体的例子:https://github.com/OrchardCMS/OrchardCore.Samples1、先使用教程,安装cms-可以是完全也可以是采用前后端分离管理。修改对应的program.cs的内容:`varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.//builder.Service......
  • 解决AttributeError: module tensorflow has no attribute placeholder
    解决AttributeError:module'tensorflow'hasnoattribute'placeholder'如果你在使用TensorFlow时遇到了"AttributeError:module'tensorflow'hasnoattribute'placeholder'"的错误,这意味着你正在使用的TensorFlow版本与你的代码不兼容。这个错误通常是因为在Tens......
  • 利用开源模块EF plus 添加系统审计功能
    我参考的网站内容:https://entityframework-plus.net/ef-core-audit-customizationhttps://entityframework-plus.net/ef-core-audit-autosavehttps://csharp.hotexamples.com/examples/Z.EntityFramework.Plus/Audit/-/php-audit-class-examples.htmlhttps://entityframework-p......
  • 前端模块化专题
    Commonjs(同步模块加载,运行时加载)exports和moudle.exports的区别?exports是module中exports对象的引用。当模块中使用了moudle.export={}的时候,所有exports都会失效。exports只能exports.a=a;这样使用,不能exports={};这种使用方式无效。每个模块其实都相......
  • es6
    let和var的区别变量声明提升暂时性死区不允许重复声明块级作用域(函数作用域,全局作用域-用函数作用域(匿名立即执行函数表达式)代替块级作用域)不与全局对象挂钩(window,global,self,globalThis)变量的结构赋值(数组,对象-原型链上也可-包装类型也可)用途交......
  • Mitsubishi 三菱FX5U与NZ2MFB1-32DT输入输出模块CC-Link通讯
    01先点参数,系统参数,设置主机型号; 02点击“以太网端口”,进入画面选择CC-LinkIEFBasic设置中的“网络配置设置”; 03将NZ2MFB1-32DT输入输出模块拖拽出配置与本站同一网段的IP; 04点击CC-LinkIEFBasic设置中的“刷新设置”; 05设置刷新地址; 06设程序编写; 最后将......
  • 计算机出现鼠标出现乱跳问题(USB485模块识别为鼠标设备)
    原因:计算机把USB485模块识别成“串口鼠标设备”,先给485上电。由于串口上一直有485数据,系统启动时候,误认为串口发送的数据是鼠标数据,从而把串口设备识别成了鼠标设备。解决方法:禁用注册表中sermouse的启动项。具体步骤:1、键盘(win+R),出现运行窗口,输入regedit,回车进入注册表编辑器......