• 自定义模块的导入


    函数作用域:定义一个function,在函数中定义的变量只能在函数内被访问,出函数就访问不了

    类比模块作用域:在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制----------------------减少了全局变量污染的问题

    模块中定义的变量和方法在调用中没有访问访问权限

    1. console.log('这是自定义的模块1 检验模块作用域问题');
    2. const username='张三';//模块中的全局变量
    3. function say(){
    4. console.log('大家好,我是'+username)
    5. }
    1. const f1=require('./test_md');//加载自定义模块---会加载模块的所有内容
    2. console.log(f1);//使用f1接收模块 f1默认是空对象

    如何向外共享模块作用域中的成员:

    • module对象:每个js自定义模块中都有一个 module,他里面存储了和当前模块有关的信息

    里面的信息如下: 

    • path:当前模块的存储路径
    • filename:当前模块的文件名称
    • exports:向外共享成员,让模块内的成员可以被外界访问到。module.exports对象,将模块中的成员共享出去,提供给外界使用
    1. console.log('这是自定义的模块1 检验模块作用域问题');
    2. const username='张三';//模块中的全局变量
    3. function say(){
    4. console.log('大家好,我是'+username)
    5. }
    6. console.log(module);

     

    这是自定义的模块1 检验模块作用域问题
    Module {
      id: '.',
      path: 'E:\\nodejs实验\\js',
      exports: {},
      filename: 'E:\\nodejs实验\\js\\test_md.js',
      loaded: false,
      children: [],
      paths: [
        'E:\\nodejs实验\\js\\node_modules',
        'E:\\nodejs实验\\node_modules',
        'E:\\node_modules'
      ]
    }

    所以实际上我们使用require导入的模块,所使用的变量是原来模块的module.exports指向的那个对象

    1. module.exports.username='张三';//对外提供变量
    2. module.exports.say=function(){
    3. console.log('大家好,我是'+username)
    4. };//对外提供方法

    暴露模块的私有成员:

    使用module.exports.对外的接口=模块内的变量

    使用module.exports.对外的接口函数=模块内的函数

    module.exports.username=username;

    1. const username='李四';
    2. function say(){
    3. console.log('大家好,我是'+username)
    4. }
    5. module.exports.a=username;
    6. module.exports.say=say;

     使用require()方法导入模块的注意点:永远以module.exports指向的对象为主(进行了重新的指向)

    1. const age='李四';
    2. module.exports.age=age;
    3. module.exports.username='张三';//对外提供变量
    4. module.exports.say=function(){
    5. console.log('大家好,我是'+username)
    6. };//对外提供方法
    7. //让 module.exports指向全新对象
    8. module.exports={
    9. nickname:'小白',
    10. sayhi(){
    11. console.log('hi');
    12. }
    13. }

     

  • 相关阅读:
    Docker 使用总结
    一文讲清楚密评中的数据库存储加密 安当加密
    leetcode 6151. 统计特殊整数
    Argumentative structure for English essay
    在 IconFont 上获取图标资源的操作方法与感悟
    java计算机毕业设计小型医院药品及门诊管理源码+数据库+系统+lw文档+mybatis+运行部署
    世界65个国家贸易开放度数据 2005-2019年
    ORA-00600 【3948】,ORA-00600 【3949】
    在vue项目中使用less全局变量
    Unity UnityWebRequest 带用户名密码
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/126588857