当前位置: 首页 > 后端技术 > Node.js

JS模块的简单理解

时间:2023-04-04 01:38:34 Node.js

require、import、exportCommonJS规范require()和module.exports使用立即函数写法,外部代码无法读取内部_count变量letmodule=(function(){let_count=0letm1=function(){console.log(_count)}letm2=function(){console.log(_count+1)}return{m1:m1,m2:m2}})ES6规范使用export来导出,使用来指定模块的对外接口,一个模块就是一个独立的文件。文件中的所有变量、函数或类都无法从外部获得。如果要获取它们,必须使用export关键字(1)输出变量或函数,类输出变量//profile.jsexportletfirstName='Mc'exportletlastName='IU'exportconstyear=2017的另一种方式写法,优先考虑下面的写法letfirstName='Mc'letlastName='IU'constyear=2017export{firstName,lastName,year}outputsafunctionfunctionv1(){}functionv2(){}export{v1asnamedV1,//askeywordrenamesv2}(2)export语句输出的接口,和它对应的值动态绑定确定关系,可以在模块内部获取实时值exportletfoo='baz'setTimeout(()=>foo='baz',500)//输出foo的值为bar,500毫秒后变为baz(3)exportdefault命令,默认输出//default.js//匿名函数exportdefaultfunction(){console.log('foo')}//非匿名函数exportdefaultfunctionfoo(){console.log('foo')}//另一种写法functionfoo(){console.log('foo')}exportdefaultfooddefault后面不能跟变量声明语句//error//exportdefaultleta=1leta=1exportdefaultaexportdefaultclass{}importNamefrom'Myclass'leto=newName()(4)正确的写法//错误的写法//①export1//②letm=1;exportm//变量的正确写法exportexportletm=1letm=1export{m}letn=1export{nasm}//函数或类的正确写法exportexportfunctionf(){}functionf(){}export{f}使用import获取其他模块提供的功能使用export命令定义模块对外接口后,其他JS文件可以通过import加载该模块(1)导入变量//main.jsimport{firstName,lastName,year}from'./profile'functionsetName(element){element.textContent=firstName+''+lastName}//也可以改名import{lastNameaslistame}from'./profile'(2)importhaspromotionEffectfoo()import{foo}from'my_module'//不会报错,可以正常调用foo函数(3)整体加载//circle.jsfunctionarea(radius){returnMath.PI*radius*radius}functioncircumference(radius){return2*Math.PI*radius}//main.jsimport{area,circumference}from'./circle'//一个一个加载area(4)circumference(14)import*ascirclefrom'./circle'//整体加载circle.area(4)circle.circumference(14)(4)importdefaultexport//defaultexportexportdefaultfunctioncrc32(){}importanyNamefrom'crc32'//非默认导出(注意大括号)exportfunctioncrc32(){}import{crc32}from'crc32'模块继承假设有一个circleplus模块,它继承了circle模块://circleplus.jsexport*from'circle'//继承circle的所有属性和方法exportlete=2.718exportdefaultfunction(x){returnMath.exp(x)}上面代码中的export是指导出所有的circlecirclemodulesPropertiesandMethods请注意,export命令会忽略circle模块的默认方法。然后,上面的代码输出自定义的e变量和默认方法。这时候也可以在导出前重命名circle的属性或方法://circleplus.jsexport{areaascircleArea}from'cricle'上面的代码表示只导出了circle模块的area方法,是重命名为圆形区域。加载方法如下//math.jsimport*asmathfrom'circleplus'importexpfrom'circleplus'console.log(exp(math.e))