八维教育IT培训学校

八维教育IT培训学校七大校区

首页 > 新闻资讯 > >

IT技术:Java编程语言模块化的require和import

发布时间:2024-02-18 05:17:39 点击:

  随着近些年云计算产业处于落地阶段,互联网人才的不断输出,JAVA编程语言因其独有的特点,使其在各项服务器中应用程序的开发所占有一定的优势,随着JSP技术的发展,使JAVA编程语言的网络应用更为实际化、更高效快捷,成为IT产业常用的技术,吸引了越来越多的学子学习JAVA编程语言。

Java编程语言模块化的require和import

  北京八维教育和大家一起分享IT技术中Java编程语言模块化的require和import,希望能够帮助到正在学习的学子们。
Java编程语言模块化的require和import

  一、区别

  1. require是commonjs的规范,在node中实现的api,import是es的语法,由编译器处理。所以import可以做模块依赖的静态分析,配合webpack、rollup等可以做treeshaking。

  2. commonjs导出的值会复制一份,require引入的是复制之后的值(引用类型只复制引用),es module导出的值是同一份(不包括export default),不管是基础类型还是应用类型。

  3. 写法上有差别,import可以使用import * 引入全部的export,也可以使用import aaa, { bbb}的方式分别引入default和非default的export,相比require更灵活。
Java编程语言模块化的require和import

  二、require和import会不会循环引用?

  答案是不会,因为模块执行后会把导出的值缓存,下次再require或者import不会再次执行。这样也就不会循环引用了。比如a引入了b,b引入了a,如果a再次执行那么会再引入b,那就循环起来了,但实际上会做缓存,再次引入不会再执行。可以通过require.cache来查看缓存的模块,key为require.resolve(path)的结果。

  三、模块中有定时器改变了导出的值,导出的值会不会变?

  // a.js

  let a = 1

  setTimeout(() => {

  a = 2

  }, 1000)

  module.exports = a

  // test.js

  const a = require('./a')

  setTimeout(() => {

  console.log(a)

  }, 2000)

  // a2.js

  let a = 1

  setTimeout(() => {

  a = 2

  }, 1000)

  export {

  a

  }

  // test2.js

  import { a } from './a2'

  setTimeout(() => {

  console.log(a)

  }, 2000)

  结果是import引入的值是2,而require引入的值一直是1,这也是require和imort很重要的一个区别,es module的export导出的值会静态的绑定,而commonjs exports导出的值是一个对象,会复制一份。这样也就出现了这样的现象。
Java编程语言模块化的require和import

  四、总结

  问 require和import的区别就是问commonjs和es module的区别,这两者一个是api的规范,一个是语言的语法,所以后者可以做静态分析,基于这个实现treeshaking,同时es module会静态的绑定导出的值,而commonjs会复制一份。但两者都会做缓存,所以不会有循环引用问题。
Java编程语言模块化的require和import

  更多关于云计算JAVA编程语言培训的问题,欢迎咨询北京八维教育,北京八维教育云计算专业以全球市场占有率最高的JAVA编程语言为核心技术,培养学生“需求拆分、模块设计、项目拆分、项目维护”四大能力,在“课程设计、项目库建设、企业实操、答辩考核”五大标准下,学生毕业后成为诸多领域,通过云计算技术有效利用各类资源加速应用的并发运行能力,具备可持续发展能力的人才。
Java编程语言模块化的require和import