| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> require和import的区别 -> 正文阅读 |
|
[JavaScript知识库]require和import的区别 |
文章目录
2. 不同端(客户端/服务器)的使用限制
CommonJS 模块化方案 require/exports 是为服务器端开发设计的。服务器模块系统同步读取模块文件内容,编译执行后得到模块接口。(Node.js 是 CommonJS 规范的实现)。 在浏览器端,因为其异步加载脚本文件的特性,CommonJS 规范无法正常加载。所以出现了 RequireJS、SeaJS 等(兼容 CommonJS )为浏览器设计的模块化方案。直到 ES6 规范出现,浏览器才拥有了自己的模块化方案 import/export。 两种方案各有各的限制,需要注意以下几点:
3. require/exports 是运行时动态加载,import/export 是静态编译
4.require/exports 输出的是一个值的拷贝,import/export 模块输出的是值的引用require/exports 输出的是值的拷贝。也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。 import/export 模块输出的是值的引用。JS 引擎对脚本静态分析的时候,遇到模块加载命令import,就会生成一个只读引用。等到脚本真正执行时,再根据这个只读引用,到被加载的那个模块里面去取值。 若文件引用的模块值改变,require 引入的模块值不会改变,而 import 引入的模块值会改变。 5. 用法不一致(1). require/exports 的用法
exports 是对 module.exports 的引用,相当于
在不改变 exports 指向的情况下,使用 exports 和 module.exports 没有区别;如果将 exports 指向了其他对象,exports 改变不会改变模块输出值。示例如下:
(2). import/export 的写法
同时需要注意
\2. 一个文件只能导出一个 default 模块。 \3. 在验证代码的时候遇到如下报错
前面提到过,浏览器引入模块的 (3). import/export 不能对引入模块重新赋值/定义当我尝试给 import 的模块重新赋值时
浏览器显示
当我重新定义引用的模块
浏览器显示
(4). ES6 模块可以在 import 引用语句前使用模块,CommonJS 则需要先引用后使用ES6 模块
CommonJS
程序报错
(5)import/export 只能在模块顶层使用,不能在函数、判断语句等代码块之中引用;require/exports 可以。
程序报错
前面提到过 import/export 在代码静态解析阶段就会生成,不会去分析代码块里面的 import/export,所以程序报语法错误,而不是运行时错误。 6. 是否采用严格模式
import/export 导出的模块默认调用严格模式。
require/exports 默认不使用严格模式,可以自定义是否使用严格模式。 例如
7. 其他模块化方法动态导入 import()import(modulePath) 表达式加载模块并返回一个 promise,该 promise resolve 为一个包含其所有导出的模块对象。 我们可以在代码中的任意位置动态地使用它。例如:
8. 参考资料 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 21:50:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |