我很懵逼啊  都是在引用模块,那到底用哪个?

参考:https://www.cnblogs.com/hwldyz/p/9145959.html

看来会明白一点的

首先这两个都是为了JS模块化编程使用.

遵循规范
  • require 是 AMD规范引入方式
  • import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法
调用时间
  • require是运行时调用,所以require理论上可以运用在代码的任何地方(虽然这么说但是还是一般放开头)
  • import是编译时调用,所以必须放在文件开头
本质
  • require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量
  • import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require

import会被转成require  那就说明了啥?import 更高级嘛,以后的主力,require就是替补嘛

require / exports :
遵循 CommonJS/AMD,只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。
用法只有以下三种简单的写法:

const fs = require('fs')
exports.fs = fs
module.exports = fs

import / export:
遵循 ES6 规范,支持编译时静态分析,便于JS引入宏和类型检验。动态绑定。
写法就比较多种多样:

import fs from 'fs'
import {default as fs} from 'fs'
import * as fs from 'fs'
import {readFile} from 'fs'
import {readFile as read} from 'fs'
import fs, {readFile} from 'fs' export default fs
export const fs
export function readFile
export {readFile, read}
export * from 'fs' 我还是觉得import 字面上更好理解一点喜欢import   
  1. 通过require引入基础数据类型时,属于复制该变量。
  2. 通过require引入复杂数据类型时,数据浅拷贝该对象。
  3. 出现模块之间的循环引用时,会输出已经执行的模块,而未执行的模块不输出(比较复杂)
  4. CommonJS模块默认export的是一个对象,即使导出的是基础数据类型

总结一点,import是主流(个人理解,不喜勿喷)

测试一下

test.js

用require引入这个test.js,打印出来

换成import的写法

改test.js

一样可以

require的话他是导出的对象,不管你里面定义的是对象还是number或者字符串都是 导出对象

console.log(bb.a.name,'dddddddddddddd')//require的写法,不是bb.name哟 对象的对象。name
 
我们在试一试定义字符串又是什么样子

把a改成字符串

可以看到就算你是字符窜 一样的导出的是对象,对象里面才是你定义的变量a 调用的话就是 bb.a

然而import的话,你定义的是什么就导出什么,你定义number导出就是number,定义字符串就是字符串,你定义对象导出的就是对象,are  you ok??

 

require 和 import 区别的更多相关文章

  1. JS 中的require 和 import 区别整理

    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...

  2. require和import区别

    遵循的模块化规范不一样 模块化规范:即为 JavaScript 提供一种模块编写.模块依赖和模块运行的方案.谁让最初的 JavaScript 是那么的裸奔呢——全局变量就是它的模块化规范. requi ...

  3. require,import区别

    链接:https://www.zhihu.com/question/56820346 遵循的模块化规范不一样 模块化规范:即为 JavaScript 提供一种模块编写.模块依赖和模块运行的方案.谁让最 ...

  4. JS 中的require 和 import 区别

    这两个都是为了JS模块化编程使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法 调用时间 require是运行时调 ...

  5. require,import区别?

    遵循的模块化规范不一样 模块化规范:即为 JavaScript 提供一种模块编写.模块依赖和模块运行的方案.谁让最初的 JavaScript 是那么的裸奔呢——全局变量就是它的模块化规范. requi ...

  6. 转:彻底搞清楚javascript中的require、import和export

    原文地址:彻底搞清楚javascript中的require.import和export   为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Ja ...

  7. require和require.async的区别

    本文用seajs来讲解两种模块加载方式require和require.async的区别,类似java里的import,php里的include. <!DOCTYPE html> <h ...

  8. require与import

    require 和 import,都是为了JS模块化使用.最近项目中,因为多人协同开发,出现了一个项目中同时使用了require 和 import 引入依赖的情况.正常情况下,一个项目中最好是对引入方 ...

  9. css link和@import区别

    1.link语法结构 <link href="CSSurl路径" rel="stylesheet" type="text/css" / ...

随机推荐

  1. 如何使用maven优雅地管理项目版本号

    原文: https://blog.csdn.net/TeleDCOS/article/details/79853782

  2. mysql binlog日志自动清理及手动删除

    说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-b ...

  3. 怎样写一个PC端使用的操盘手软件(用来买卖股票,查看报表,行情)

    我们想写一个操盘手软件,对于操盘而言,首先是快,然后是资料尽可能丰富,最好能看到行情,报表什么的.只是windows上写软件看似基础,实际上都不怎么好弄,用C++开发确实可以实现所有功能,估计光研发费 ...

  4. 某公司面试java试题之【二】,看看吧,说不定就是你将要做的题

    这次做的题是在是太多了,五页呢,吓死宝宝了!

  5. Tensorflow Seq2seq attention decode解析

    tensorflow基于 Grammar as a Foreign Language实现,这篇论文给出的公式也比较清楚. 这里关注seq2seq.attention_decode函数, 主要输入 de ...

  6. vue---computed计算属性的使用

    一直以来在使用vue的时候,会对vue的computed属性和watch属性具体的使用分不清楚,总算花点时间整理了下. computed:通常用于监控自己定义的变量,这个变量可以不再data中定义,直 ...

  7. python3 小工具

    扫描IP的端口是否开放:Porttest.py # -*- coding: utf-8 -*- import sys import os import socket #扫描 def scanport( ...

  8. vue3版本到vue2版本的桥接工具

    vue2的命令可以正常使用.

  9. 浅谈SFTP和FTP的区别

    一.适用场景 我们平时习惯了使用ftp来上传下载文件,尤其是很多Linux环境下,我们一般都会通过第三方的SSH工具连接到Linux,但是当我们需要传输文件到Linux服务器当中,很多人习惯用ftp来 ...

  10. HBASE的Java与Javaweb(采用MVC模式)实现增删改查附带源码

    项目文件截图 Java运行截图 package domain; import java.io.IOException; import java.util.ArrayList; import java. ...