myJS
  • 说明
  • js核心
  • 函数式编程
    • 链式优化
    • 你真的知道函数吗?
    • 纯函数
    • 函数柯里化
  • 内存的那些事
    • 栈内存和堆内存
    • 垃圾回收机制-GC
    • 闭包恍然大悟
      • 运行时的词法作用域
    • 数据结构基于内存
    • 怎样用chrome devtool 查看内存泄漏状况
    • dom元素的内存泄漏例子讲解
  • 网络请求
    • 原生js请求
    • https了解一下
    • 跨域方法
    • 你不知道的浏览器页面渲染机制
    • 聊点 TCP 干货(1)
  • 异步编程
    • await 和 async
  • 服务器
    • nginx
  • 模块化编程
    • commonJs模块
    • ES模块
    • AMD模块
    • CMD模块
    • module.exports与export那些事儿
  • webpack
    • 环境变量的使用
      • node配置
      • webapck配置
    • postcss处理css
    • webpack-dev-server
    • HMR热更新原理
    • babel配置
      • 转化es6
      • Runtime transform/runtime
    • extract-text-webpack-plugin
    • css加载
    • 打包优化
    • 第三方插件加载中
    • 热更新踩坑
    • typescript+node
    • 代码分割的意思
  • CMD命令行
    • 文件的增删改查
  • node
    • path模块
    • node 文件路径的分析
  • js一些资源库
  • node毛皮
    • cnpm 淘宝镜像
  • 浏览器调试
    • js调试
    • 浏览器同源政策及其规避方法
  • 好好理解变量
    • this指向
    • 作用域
  • 专有名词理解
    • MVC
  • postman
    • 环境变量
  • 树的遍历和操作
    • 二叉树
  • 关于Date你要知道的是?
    • 获取某个月的天数
    • js 日期详解
  • Dom 对象
  • 回调函数
    • 语法。为什么要用
  • class 怎样用好类
    • 用类直接创建对象关联到变量
  • js引擎
  • git操作
    • .gitignore忽略文件
    • 删除操作
  • table学习
    • 表格样式
    • 固定列和行
  • 拖拽
    • 目标容器
    • 狐火的拖拽就是不一样
  • 正则学习
  • 算法
    • 数据结构
  • js小技巧
  • indexDB
  • Matrix 矩阵
Powered by GitBook
On this page

Was this helpful?

  1. 模块化编程

ES模块

千万不要和CommonJs的规范搞混,两个额功能差不多,但是语法是不同的。虽然有点类似,刚开始我也搞混了。但是在webpack,也是用的是nodeJS进行编译的,所以可以吧这两个模块一起使用。

  • 模块的定义, export,不能像commonJs用等号赋值,在尾部导出时,使用{}

function fun1(a ,  b){

  return a+b ;

}

export {fun1}
//或
export default fun1 ;
// 或
export function fun1(a,b){ 
  return a+b;
}
  • 模块引入 import,当混合node的模块导出时,编译的js文件里,会把两者导出的变量合并在一起,但是用node 来运行时会报错,node不能识别export。用node导出的模块可以使用ES的import 引入

// test1.js
let a= {name:1};

function test1(){
    a={test:1} ;
    return a ;
}

let c="str";
export function test2(){
    return 1;
};
exports.a=a;
exports.c= c;
exports.test1= test1;
a= {fg:4}; //注意


// test2.js
import * as ES from "./test1.js" ;
const node = require("./test1.js");
import a from "./test1.js" ;

console.log(ES);
console.log(node);
console.log(a);//{name:1}

// ES 与 node 是一样的,把两者的导出融在一起
{test2: [Function], a: {name:1}, c: "str", test1: [Function], __esModule: true};

node.test1();
console.log(a);//{name:1}
// a没有变。

注意:a= {fg:4} ,当我在a.js里的最后一行加上a = {fg:4}, 不管是在a.js里还是b.js里都没有改变导出的变量。因为用的是exports 导出,也就是commonJS规范。但是当用ES的模块规范情况就变得不一样。

  • 模块的运行机制:ES的模块加载是动态引用,不会缓存变量。也就是说加载的时候是对被加载的模块的引用。根据只读引用,当执行的时候会去被加载的模块取值。

// a.js
let a= {name:1};

function test1(){

    a={test:1} ;

    return a ;
}



let c="str";

export function test2(){

    return 1;
};
export {a} ;


exports.a=a;
exports.c= c;
exports.test1= test1;
a= {fg:4}; //注意 此时导出的 a 不再是 {name:1}



// b.js

const node = require("./a.js");
import * as ES from "./a.js";
import {a} from './a.js';

console.log(node.a) // {fg:4}    node 与 ES 一样引用的是同一个对象。
console.log(a)  // {fg:4}
ES.test1();
console.log(a) //{test:1}

并且要是混有node的模块定义,会以ES的模块定义为最终的值。

PreviouscommonJs模块NextAMD模块

Last updated 6 years ago

Was this helpful?