面试题--ES6与commonJS模块化规范

489 阅读2分钟

ES6与commonJS

ES6与commonJS分别是什么

  • ES6主要是对于js增强的一种语法规范
  • 而commonJS是一种包管理规范,是针对于js文件之间的依赖与引用,目前nodeJS就是遵循的commonJS的规范

关于ES6与commonJS的模块化的区别

  • commonJS

    • 对于基本数据类型是属于复制,而对于复杂数据类型是浅拷贝,所以修改一个模块的值,另一个模块也会受到影响
    • 这要一加载,整个require的代码均为被执行
    • require中的模块是被缓存,只有在第一次加载的时候被执行一次
    • 循环加载时,属于加载时执行,即在加载时全部的require会被执行,最终只会执行输出的部分,未输入的部分不会被执行
  • ES6

    • import是只读引用,即不允许修改原模块中的值,且原始值发生变化会使加载值同样变化
    • 是动态新增的,没有缓存
    • 循环加载时,只要两个模块中存在引用就一定会执行
    • import/export 最终会编译为require与exports

关于ES6导入导出的区别

  • 默认导出/导入

    //a模块
    export default {
      name: '杨杨杨',
      age: 18,
      gender:'男'
    }
    //b模块
    import obj from './a.js'
    console.log(obj)// {name: '杨杨杨',age: 18,gender:'男'}
    
    • 默认导出只能导出一次
  • 按需导出/导入

    //a模块
    export let a = 1
    export let b = ['张三','李四']
    export fn = () => {console.log('哈哈')}
    //b模块
    import {a as a1, b, fn} from './a.js'
    
    • 按需导出可以导出多个,并且能与默认导出联合使用
    • as修改变量名
  • 直接导出/导入

    //a模块
    fn = () => {
        console.log('我是一个函数,里面写了很多内容')
    }
    //b模块
    import './a.js'
    

最后同学们前端之路漫漫,宝剑锋从磨砺出,梅花香自苦寒来...