Javascript模块化机制原理是什么

  介绍

本篇内容介绍了“Javascript模块化机制原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

<强> 1。概述

js发展初期暴露了其缺陷:缺乏模块,后来提出了commonJS规范来规范其模块的规范。作为JavaScript新手,发现对于其JavaScript的模块机制,不是很理解。我查阅了一些资料整理了JavaScript commonJS的原理和机制。

<强> 2。JavaScript

2.1无后端的项目

这类项目不能使用CommonJS的模块规范,这是我起初所犯的错误。在没有es6被大多数浏览器支持的时候,js文件充斥着var和函数,由此引来了命名冲突和污染,使得JavaScript代码很复杂.es6的阶级概念出现有效规范了JavaScript的模块化规范。由于这类项目只能通过脚本标签引入,我们在这里讲一下脚本标签的相关知识。

每当浏览器解析到& lt; script>标签(无论内嵌还是外链)时,浏览器会优先下载,解析并执行该标签中的JavaScript代码,而阻塞了其后所有页面内容的下载和渲染。根据上述对& lt; script>标签特性的描述,我们知道,在该示例中,当浏览器解析到& lt; script>标签时,浏览器会停止解析其后的内容,而优先下载脚本文件,并执行其中的代码,这意味着,其后的test.css样式文件和& lt; body>标签都无法被加载,由于& lt; body>标签无法被加载,那么页面自然就无法渲染了。因此传统做法是
假定一点。js文件:

//定义类   class  Point  {   ,构造函数(x, y), {   this.x 才能=,x;   this.y 才能=,y;   ,}      ,toString () {   return 才能;& # 39;(& # 39;,+,this.x  +, & # 39;,, & # 39;, +, this.y  +, & # 39;) & # 39;;   ,}   }

则在index.js中引入point.js,这需要在index . html中身体的尾部

& lt;脚本https://www.yisu.com/zixun/src=" point.js ">
& lt;脚本https://www.yisu.com/zixun/src=" index.js ">

这样就可以在index.js使用点类了。

总结下来:

js类库必须在标题中引入,保证对之后脚本引入的js文件的支持,毕竟脚本标签的执行顺序是顺序执行,脚本标签引入顺序和实际引入顺序相同。

自定义的脚本标签引入的js文件,要放在身体的尾部,保证DOM元素渲染结束。

每个js文件尽量是es6类对象,避免作用域和命名域的冲突。

2.2后端服务器NodeJS

模块引用的实例如下:要求方法

<代码>常量数学=要求(“math");

模块的定义:

上下文提供了出口对象用于导出当前模块方法和变量,并且它是唯一的导出出口。在模块中,还存在一个模块对象,他代表模块自身,出口是模块对象的属性。导出方式:

//, math.js   时间=exports.add  function  (), {,};   module.exports.add =, function  (), {,},

2.3后端es6的模块

es6模块不是对象,而是通过出口命令显式指定输出的代码,输入时也采用静态命令的形式。

由于es6模块是编译时加载,使得静态分析成为可能。有了它,就能进一步拓宽JavaScript的语法,比如引入宏(宏观)和类型检验(类型系统)这些只能靠静态分析实现的功能。

除了静态加载带来的各种好处,es6模块还有以下好处:

不再需要UMD模块格式了,将来服务器和浏览器都会支持es6模块格式。目前,通过各种工具库,其实已经做到了这一点。

将来浏览器的新API就能用模块格式提供,不再必要做成全局变量或者导航器对象的属性。

不再需要对象作为命名空间(比如数学对象),未来这些功能可以通过模块提供。

浏览器使用es6模块的语法如下:

导出对象和变量:

var  firstName =, & # 39; xxx # 39;;   var  lastName =, & # 39;多# 39;;   export  {firstName, lastName};   Point.js//,导出类对象   export  default  class  Point  extends  circle  {   }

引入模块

<代码>从“进口点Point";

Javascript模块化机制原理是什么