export/export default/import

本文深入探讨ES6的模块化特性,包括export和import的使用方法,如何导出和导入变量、函数,以及export default的特殊用法。通过具体代码示例,帮助读者理解模块化编程在现代JavaScript开发中的应用。

ES6使用export(导出)/import(导入)模块

1. export.js模块,使用export命令对外部输出了3个变量

export let name="anna";
export let age = 20;
export let sex="woman";

这个export.js还有另一种写法

let name="anna";
let age = 20;
let sex="woman";

export {name,age,sex};

export还可以输出函数

export const add = (x,y) => {
return x+y;
}

export还可以使用as关键字对输出的变量重命名
 

export {
name as newname,
age as newage,
sex as newsex
};

2. import.js

import导入在文件里使用

import {name,age} from 'export.js'


mounted(){
console.log(name,age);
}

import也可以为导入的模块变量重命名,export.js后面的.js可以省略
import {name as newname} from 'export'
注意,import命令具有提升效果,会提升到整个模块的头部,首先执行

模块除了单个加载外还可以整体加载

import {name,age} from 'export'
import * as person from 'export.js'

使用:person.name; person.age

需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。

3. export default 命令 为模块指定默认输出

export-default.js

export default function(){
return 100
}

或者:

function num(){
...
}
export default num;

num函数名在外部是无效的

使用:其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。需要注意的是,这时import命令后面,不使用大括号。

import numberName from 'export-default'


numberName();//函数执行

export和export default的区别:
1 使用export default时,对应的import语句不需要使用大括号{},使用export则需要{}
2 export default用于指定模块的默认输出,一个模块只能有一个默认输出。
因为export default命令其实只是输出一个叫做default的变量,所以它后面不能跟变量声明语句。而export可以有多个,且export可以直接导出变量表达式

 

<think> 我们在讨论的是汇编语言中的伪指令(pseudo-instruction)概念。而用户询问的是JavaScript(或ECMAScript)模块系统中的`import`和`export`语句是否为伪指令。这两者属于完全不同的领域。 在汇编语言中,伪指令是汇编器提供的特殊指令,它们并不直接对应机器指令,而是指导汇编器如何生成机器码或进行数据分配等操作。例如,在ARM汇编中,DCD、DCB等是伪指令。 而在JavaScript中,`import`和`export`是语言本身的语法关键字,用于模块的导入和导出。它们是ECMAScript标准的一部分,由JavaScript引擎(或编译器/转译器如Babel)在编译阶段处理,但它们的处理是语法层面的,而不是汇编层面的伪指令。 因此,我们可以得出结论: - **`import`和`export`不是伪指令**,它们是ECMAScript模块系统的语法关键字。 根据引用内容,我们可以进一步说明: 1. `export`用于从模块中导出变量、函数、类等,使得其他模块可以通过`import`引入它们(引用[1][2][3][4])。 2. `import`用于引入其他模块导出的绑定(引用[1][3][4])。 这些关键字在编译阶段被处理,但它们是JavaScript语言标准的一部分,而不是汇编器伪指令。 关于引用内容的支持: - 引用[1]说明了`import`的基本用法和注意事项。 - 引用[2]解释了`export`的作用和用法。 - 引用[3]详细说明了`export default`和普通`export`的区别,以及`import`的一些特性。 - 引用[4]列出了`import`的不同语法形式。 因此,我们可以这样回答: 在JavaScript(ECMAScript)中,**`import`和`export`不是伪指令**,而是用于模块导入和导出的语法关键字。它们由JavaScript引擎在编译阶段处理,但属于语言标准语法,与汇编语言中的伪指令概念无关。 ### 详细解释: 1. **伪指令的适用领域**: - 伪指令通常出现在汇编语言中,由汇编器处理(如ARM汇编中的`DCD`、`DCB`)。 - JavaScript中的`import`/`export`属于高级编程语言的模块语法。 2. **`import`/`export`的作用**: - `export`:将当前模块的变量、函数、类等导出为对外接口(引用[1][2][3])。 - `import`:从其他模块导入指定的导出(引用[1][3][4])。 3. **处理阶段**: - `import`语句会被提升到模块作用域的顶部,在编译阶段静态执行(引用[1][3])。 - 与汇编伪指令不同,`import`/`export`不涉及内存分配或机器码生成,而是定义模块间的依赖关系。 4. **语法形式**: - 多种`import`语法形式(引用[4]): ```javascript import defaultExport from 'module'; import * as name from 'module'; import { export1, export2 as alias } from 'module'; ``` - `export`语法(引用[2][3]): ```javascript export const a = 1; export { a, b as c }; export default ...; ``` ### 总结: - **`import`和`export`是ECMAScript标准定义的模块语法关键字,不属于任何形式的伪指令**。 - 它们的作用是管理JavaScript模块的依赖关系,与汇编语言伪指令有本质区别。 §§相关问题§§ 1. JavaScript中`import`和`require`有什么本质区别? 2. 如何实现一个支持ES6模块的JavaScript打包工具? 3. `export default`和`export`在模块导出机制上有何不同? 4. 为什么`import`命令在编译阶段执行? </think> 在 JavaScript 和 ECMAScript 模块系统中,**`import`和`export`不是伪指令**,而是语言标准定义的**语法关键字**。以下是详细分析: ### 关键区别:伪指令 vs 语法关键字 | **特性** | 伪指令 (如 ARM 的 DCD) | `import`/`export` | |------------------|----------------------------------------|----------------------------------| | **作用领域** | 汇编语言 (硬件相关) | JavaScript/ECMAScript (高级语言) | | **功能** | 指导汇编器分配内存或数据 | 定义模块的输入输出接口 | | **处理阶段** | 编译阶段 (生成机器码前) | 编译阶段 (代码解析时) | | **是否生成代码** | 生成数据区域,不生成 CPU 指令 | 不生成代码,仅建立模块绑定关系 | | **可编程性** | 静态数据定义 | 支持动态绑定(引用[3]) | ### `import`/`export` 的核心特性 1. **静态模块声明** - `export` 定义模块对外接口(变量/函数/类) ```javascript // 命名导出 export const PI = 3.14; export function sum(a, b) { return a + b; } // 默认导出 (每个模块唯一) export default class Calculator {...} ``` - `import` 引入其他模块的接口(引用[1][3]) ```javascript import { PI, sum } from './math.js'; // 命名导入 import Calculator from './calculator.js'; // 默认导入 ``` 2. **编译阶段执行**(引用[1][3]) - 提升(Hoisting):`import` 语句在编译时优先处理 - 静态分析:路径必须是字符串字面量,**不支持表达式** ```javascript // 合法 import './module.js'; // 非法!编译报错 let path = './module.js'; import path; // Error: 路径必须是字面量 ``` 3. **绑定机制**(引用[3]) - 导入的变量是**只读引用**(常量绑定) - 导出对象的属性可修改(动态绑定) ```javascript // module.js export let counter = 0; export const increment = () => counter++; // main.js import { counter, increment } from './module.js'; console.log(counter); // 0 increment(); console.log(counter); // 1 (值动态更新) counter = 10; // TypeError: 禁止修改绑定 ``` ### 与伪指令的本质差异 - **目标不同** 伪指令(如 `DCD`)直接操作内存布局,而 `import/export` 管理代码组织结构(引用[2][4])。 - **行为不同** ```mermaid graph LR A[import/export] -->|编译阶段| B[建立模块依赖图] B --> C[生成模块闭包] C --> D[运行时按需加载] E[伪指令 DCD] -->|编译阶段| F[分配固定内存空间] F --> G[写入初始值] ``` - **语法约束** `import/export` 必须位于模块顶层(引用[3]),而伪指令可出现在汇编代码任意位置。 ### 总结 **`import` 和 `export` 是 ECMAScript 标准定义的模块语法关键字**,用于声明模块依赖关系。它们: 1. 在编译阶段静态解析(引用[1][3]) 2. 建立跨模块的绑定关系(引用[3]) 3. 不生成底层机器指令 4. 与汇编伪指令(如 `DCD`)有本质区别: - 伪指令 ⇒ **硬件内存操作** - `import/export` ⇒ **软件模块化抽象** 因此,在 JavaScript 上下文中,不应将 `import/export` 归类为伪指令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLL_LH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值