JS中ESModule和commonjs介绍及使用区别

JS中ESModule和CommonJS均为JS的模块化规范。ESModule是ECMAScript 6标准中新增的模块化规范,而CommonJS则是Node.js使用的模块化规范。

ESModule和CommonJS的使用区别主要体现在以下几个方面:

定义方式

ESModule使用export关键字来导出模块中的变量、函数或类,使用import关键字来导入其他模块中的变量、函数或类。

// person.js
export const name = '张三';
export function sayHello() {
  console.log('你好,我是' + name);
}

// index.js
import { name, sayHello } from './person.js';
console.log(name);
sayHello();

CommonJS则使用module.exportsexports来导出模块中的变量、函数或类,使用require来导入其他模块中的变量、函数或类。

// person.js
exports.name = '张三';
exports.sayHello = function() {
  console.log('你好,我是' + exports.name);
}

// index.js
const person = require('./person.js');
console.log(person.name);
person.sayHello();

加载方式

ESModule在代码解析时会进行静态分析,即先处理import语句,然后再执行模块中的代码。同时,ESModule支持在浏览器端动态加载模块。例如:

import('./module.js').then(module => {
  // 模块加载成功
}).catch(error => {
  // 模块加载失败
});

CommonJS则是在运行时同步加载模块。

变量绑定方式

ESModule导入的变量是只读的,在导入模块中对变量进行修改是无效的。如下示例中,对变量name重新赋值不会改变原始模块中导出的值。

// person.js
export const name = '张三';

// index.js
import { name } from './person.js';
name = '李四'; // 无效
console.log(name); // 输出: 张三

而CommonJS导入的变量是可以修改的,如下示例中,对变量name进行重新赋值会改变原始模块中导出的值。

// person.js
exports.name = '张三';

// index.js
const person = require('./person.js');
person.name = '李四'; // 有效
console.log(person.name); // 输出: 李四

综上所述,ESModule和CommonJS的使用方式和区别如下表:

ESModule CommonJS
定义方式 exportimport module.exportsexportsrequire
加载方式 静态分析、动态加载 同步加载
变量绑定方式 只读 可修改

示例1:ESModule和CommonJS的混用

// utils.js
export function add(a, b) {
  return a + b;
}

// index.js
const utils = require('./utils.js'); // 使用CommonJS加载ESModule
console.log(utils.add(1, 2));

import { add } from './utils.js'; // 使用ESModule加载ESModule
console.log(add(1, 2));

示例2:在Vue项目中使用ESModule

// App.vue
<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
import { computed } from 'vue';

export default {
  setup() {
    const message = computed(() => 'Hello, Vue!');

    return {
      message
    }
  }
}
</script>

在Vue 3.x版本的项目中,可以直接使用ESModule加载Vue.js和其它依赖库,并使用setup函数构建逻辑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中ESModule和commonjs介绍及使用区别 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 学好js,这些js函数概念一定要知道【推荐】

    学好 JS,这些 JS 函数概念一定要知道 Javascript 是一种弱类型的编程语言,是前端工程师必备的技能之一。学好JS的过程中,我们需要熟练掌握一些重要的函数概念,本篇文章就为大家介绍这些概念并提供实例说明。 纯函数 纯函数是指输入确定时,输出也是确定的函数,并且不会对其它变量产生影响。 例如,下面这个函数就是一个纯函数: function add(…

    JavaScript 2023年5月27日
    00
  • 分享一个自己写的table表格排序js插件(高效简洁)

    以下是“分享一个自己写的table表格排序js插件(高效简洁)”的完整攻略。 简介 这个table表格排序js插件是基于原生JS编写的,能够高效、简洁地为网页中的table表格添加排序功能。插件使用方便,只需要在HTML中添加相应的class和data-属性即可,不需要引入其他框架或库。 使用方法 引入插件 首先,需要在HTML中引入插件的JS文件: &lt…

    JavaScript 2023年6月10日
    00
  • js 数组克隆方法 小结

    以下是关于“js 数组克隆方法 小结”的完整攻略: 标准的数组克隆方式 在JavaScript中,有两种标准的数组克隆方式: 利用ES6的扩展运算符(…) const arr1 = [1, 2, 3]; const arr2 = […arr1]; console.log(arr1); // [1, 2, 3] console.log(arr2); /…

    JavaScript 2023年5月27日
    00
  • JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)

    JavaScript是一门非常强大的编程语言,其中数组作为数据结构扮演着重要的角色。本文将为大家介绍JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)的详细攻略。 JavaScript数组的快速克隆 JavaScript数组使用slice()函数可以迅速地创建一个数组的克隆。slice()函数可以截取数组的一…

    JavaScript 2023年5月27日
    00
  • js脚本学习 比较实用的基础

    JS脚本学习 比较实用的基础攻略 前言 JavaScript是一种常用的编程语言,广泛用于Web前端和服务器后端开发,现如今几乎所有的网站都离不开JavaScript的支持。本文将介绍JS的一些脚本基础知识,以及一些实用的基础操作方法,旨在帮助初学者快速入门JS。 一、学习资源 MDN Web 文档是JS官方文档,包含了JS的语法、API、示例等详细资料。 …

    JavaScript 2023年6月11日
    00
  • 容易造成JavaScript内存泄露几个方面

    当我们编写JavaScript代码时,由于JavaScript的垃圾回收机制和内存管理机制的不足,可能会导致内存泄漏的问题。下面是容易造成JavaScript内存泄露的几个方面: 1. 没有处理事件和定时器 当我们注册事件和定时器时,如果没有另外处理它们,这些事件和定时器会一直存在,直到页面卸载。如果存在大量事件和定时器,可能会导致内存泄漏的问题。为了解决这…

    JavaScript 2023年6月10日
    00
  • GridView选择记录同时confirm用户确认删除

    GridView选择记录同时confirm用户确认删除 简介 由于GridView是ASP.NET Web Forms常用的控件之一,经常会被用来展示和编辑自定义数据源。在开发中,经常会遇到用户想要删除某一项记录的需求。这时候,我们需要使用JavaScript来先确认用户是否真正想要删除该记录。 步骤 第一步:在GridView中添加CheckBox列 我们…

    JavaScript 2023年6月11日
    00
  • SpringMVC结合ajaxfileupload实现文件无刷新上传代码

    下面就来详细讲解一下“SpringMVC结合ajaxfileupload实现文件无刷新上传代码”的完整攻略: 准备工作 在进行具体的代码实现前,我们需要准备以下的开发环境和配置: 安装Maven; 在pom.xml文件中添加相关的依赖项; 创建SpringMVC项目; 配置SpringMVC拦截器和控制器; 引入ajaxfileupload插件。 代码实现 …

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部