JavaScript模块化开发

本文介绍了JavaScript模块化的概念,强调了模块化开发的目的——避免全局变量冲突和提高代码复用。通过实例展示了如何使用exports和module.exports进行导出,以及require函数的查找规则和模块的加载过程。模块在首次引入时运行一次,后续引入则从缓存中获取,确保只加载一次。

什么是模块化?

       上模块化开发最终的目的是将程序划分成一个个小的结构

       结构中编写属于自己的逻辑代码,有自己的作用域,定义变量名词时不会影响到其他的结构

       这个结构可以将自己希望暴露的变量、函数、对象等导出给其结构使用

       也可以通过某种方式,导入另外结构中的变量、函数、对象

       这些就是提到的结构,就是模块;按照这种结构划分开发程序的过程,就是模块化开发的过程

         // 假如项目中只有两个开发者  一个模块    一个JUSNYA

        //  模块 创建一个js文件  声明变量name赋值为 模块化

        //  JUSNYA 创建一个js文件   声明变量name赋值为JUSNYAx

        //  之后都在首页中引入

        //   mokuai.js文件本身是没有自己的作用域的    所有  模块化 文件中的name属于全局变量

        //  JUSNYA.js文件本身是没有自己的作用域的       所有  JUSNYAx 文件中的name属于全变量

        //  之后都在首页中引入

        //  为了避免全局变量命名冲突  所以我们可以借助立即函数

        //  将 模块化 文件中的代码用立即执行函数包裹起来    JUSNYA也是

        //  因为函数作用域   立即执行函数也是作用域的

        //  现在就是我们给  mokuai  文件中的变量加上一层作用域   给  JUSNYA文件中的变量加上一层作用域

        //  现在确实解决了全局变量命名的冲突问题

 举例

一、实例                

 

 

 

二、实例                

 

 

 

解构赋值

        

 

exports导出 

         注:exports是一个对象,我们可以在这个对象中添加很多个属性,添加的属性会导出

        

         文件中可以导入

        

        完成也上操作!  理解这段话! 

         意味着main中的bar变量等于exports对象;

         也就是require通过各种查找方式,最终找到了exports这个对象;

         并且将这个exports对象赋值给了bar变量;

         bar变量就是exports对象了

module.exports导出

        为什么exports也可以导出呢?

        因为module对象的exports属性是exports对象的一个引用;
        也就是说 module.exports = exports = main中的bar;

        

         

        第一种变量的导出

         

        第二种变量的导出

        

        第三种变量的导出

         

 

require细节

        require是一个函数,可以帮助我们引入一个文件(模块)中导出的对象

  require的查找规则是

        导入格式如下:require(X)

第一种:X是一个Node核心模块,比如path、http  直接返回核心模块,并且停止查找

        

 第二种:X是以 ./ 或 ../ 或 /(根目录)开头的

            将X当做一个文件在对应的目录下查找;   有后缀名,按照后缀名的格式查找对应的文件,没有后缀名,会按照顺序:1、直接查找文件X  2、查找X.js文件  3、查找X.json文件    4、查找X.node文件           注:没有找到就会报错:not found

        

模块的加载过程   

一:模块在被第一次引入时,模块中的js代码会被运行一次

二:模块被多次引入时,会缓存,最终只加载(运行)一次

为什么只会加载运行一次呢?
 这是因为每个模块对象module都有一个属性:loaded。
 为false表示还没有加载,为true表示已经加载;

 

 

 

结论:模块在被第一次引入时。模块中的js代码会被运行一次

 

 

 结论二:模块被多次引入时,会缓存,最终只加载一次

这是因为每个模块对象module都有一个属性:loaded。

为false表示还没有加载,为true表示已经加载;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值