import和require的区别和使用

本文详细对比了JavaScript中import与require的区别,包括它们所遵循的规范、调用时间、本质及用法等方面,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相同:import和require都是模块化编程的产物

区别:

遵循规范:

  • require是AMD规范引入的方式
  • import是es6的一个语法标准,如果要兼容浏览器的话必须转化为es5的语法。

调用时间:

  • require是运行时调用,所以可以放置在模块任何位置。只能在运行时确定模块的依赖关系以及输入/输出变量,无法进行静态优化。
  • import是编译时调用,所以必须放置在模块头部。支持编译时静态分析,便于JS引入宏和类型检验。动态绑定。

本质

  • require是赋值过程,因此对于对象赋值,是一种浅拷贝
  • import是解构过程

用法:

  • require

    require/exports

    // a.js
    const myfs = require('b');
    // b.js
    module.exports = "hello";
    // or
    exports = "hello";
    
    // exports = module.exports;
    // return module.exports;
    
  • import

    import导入模块

    import xx from 'test.js';// xx 默认导入的是default的值
    // 如果是用 {} 表示其内的内容是解构对应于export {}导出的内容
    import { a } from 'test.js'; // a 对应于export导出的变量名一致
    import * as test from 'test.js'; // 导入所有的数据
    import { a as key,b as value } from 'test.js' // 导入指定的变量数据并进行重命名操作 
    

    import导出模块

    export {
    	a,
        b
    }; // 此方式针对于直接使用已定义好的变量名称
    export default {
        a,
        bb: b
    }; // 此方式针对于需要对已有的变量进行重命名操作,比如: bb:b,此时就不能使用export:{}
    export default object;// 此方式针对于需要导出的模块已经被封装成对象,直接导出object
    
    // 重定向导出
    // 含义: 在当前页面导出另一个页面导出的内容
    // a.js
    const a = "hello";
    const b = {
        test: "hellp"
    }
    export {
    	a
    }
    export default b;
    
    // b.js
    // 将 export {}中的值全部导出去
    export * from './a.js';// ./表示当前目录下
    // 将export default XX 的值导出
    export { default } from './a.js'; 
    
    // 在使用重定向默认的导出的时候,会报错
    // Uncaught SyntaxError: Unexpected token 'export'
    

    注意: 导入export {} 的时候,需要使用解构,也即加上{}来进行引入

    导入export default的时候,不需要加{},原因:全局只有一个默认导出,所以不需要加{}

    页面中要使用import语法,可能会报以下错误:

    Uncaught SyntaxError: Cannot use import statement outside a module
    

    原因: script标签默认使用javascript语言(type = 'text/javascript'),使用es6的语法会发生解析错误,需要在script标签中加入type="module"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值