Node.JS(4)--模块、exports和module

news2024/9/29 21:32:59

文章目录

  • 模块
    • 核心模块
    • 文件模块
  • 基本数据类型
  • 引用数据类型
  • exports和module.exports的关系

模块

分为两大类

核心模块

  • 由node引擎提供的模块

  • 核心模块的标识就是模块的名字

var fs=require("fs");

在这里插入图片描述

文件模块

  • 由用户自己创建的模块
  • 文件模块的标识就是文件的路径(绝对路径、相对路径),相对路径用的更多,相对路径使用.或者…开头

在node中有一个全局对象global,它的作用和网页中window类似,在全局中创建的变量都会作为global的属性保存,在全局中创建的函数会作为global的方法保存

arguements表示函数的变量

arguements.callee这个属性保存的是当前执行的函数对象

在这里插入图片描述

如果在arguments.callee后面+“”,代表拼串,会把函数打印出来

console.log(arguments.callee+"");

在这里插入图片描述

当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码

function (exports, require, module, __filename, __dirname) {

在代码的最底部,添加如下代码

}

实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参

exports:该对象将变量或函数暴露到外部

require:函数,用来引入外部的模块

module:代表当前模块本身,exports就是module的属性,既可以使用exports到处,也可以使用module.exports导出

console.log(exports);
console.log(module.exports);
console.log(module.exports==exports);

在这里插入图片描述

_filename:当前模块的完整路径

console.log(__filename);

在这里插入图片描述

_dirname:当前模块所在文件夹的完整路径

console.log(__dirname);

在这里插入图片描述

helloModule.js

module.exports={
    name:'猪八戒',
    age:28,
    sayName:function(){
        console.log("我是猪八戒");
    }
}

05.module.js

var hello=require("./helloModule");

console.log(hello.name);
console.log(hello.age);
console.log(hello.sayName);

在这里插入图片描述

基本数据类型

var a=10;
var b=a;
a++;

console.log("a="+a);
console.log("b="+b);

在这里插入图片描述

基本数据类型的值是相互独立的,所以a++后,b不发生改变

可以从堆栈内存中进行分析,在存入变量和值后,a的值10和b的值是独立的,此时a的值变化不影响b的值

在这里插入图片描述

引用数据类型

此时再看到引用变量

var obj=new Object();
obj.name="孙悟空";
var obj2=obj;
obj2.name="猪八戒";

console.log("obj="+obj.name);
console.log("obj2="+obj2.name);

在这里插入图片描述

当出现new时,就需要往堆内存中存放对象,栈内存中存放变量,对象没有名字,只有内存地址(16进制地址),变量的值就是地址值,此时会有指针指向堆内存中的对象

此时加入obj.name时,会加到堆内存中的对象

在这里插入图片描述

当对obj2设置为null,对 obj 没有影响

因为obj2改变的是变量,obj2.name改变的是对象

在这里插入图片描述

exports和module.exports的关系

此时再转回到module.exports和exports

在这里插入图片描述

module.exports改变的是对象,exports改变的是变量的值,此时运行就会报错

在这里插入图片描述

通过exports只能使用.的方式来向外暴露内部变量

exports.xxx=xx;

而module.exports既可以通过.的形式,也可以直接赋值

module.exports.xxx=xx;
//或者
module.exports={...}

通过exports只能使用.的方式来向外暴露内部变量

exports.xxx=xx;

而module.exports既可以通过.的形式,也可以直接赋值

module.exports.xxx=xx;
//或者
module.exports={...}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个专注推荐.Net开源项目的榜单

大家好,我是编程乐趣,从7月份开始推荐开源项目,已经推荐了接近100个开源项目了,其中绝大部分是有关.Net的开源项目,也受到大家非常多人的喜欢。 由于公众号不方便查询,很多人又想了解更多的开源项目&#…

C++【多线程】

文章目录一、什么是线程二、创建线程一、什么是线程 线程在进程内部执行,是OS调度的基本单位。 在堆区上存在下面一种数据结构 struct vm_area_struct{ //用来记录这块空间的起始和终止。unsigned long vm_start;unsigned long vm_end;//其实这是一个双向链表中的结…

判断环形链表是否有环??返回环形链表的入口点!!

上次笔者写了一篇大概有7个题的链表相关的题目解析,感觉还不错,感兴趣的各位老铁,可以点一下链接进行欣赏:做几个与链表相关的题吧!https://blog.csdn.net/weixin_64308540/article/details/128550685?spm1001.2014.3…

CPT205-Computer Graphics(2)

文章目录7. Hierarchical Modelling7.1 Local and world co-ordinate frames of reference7.1.1 Relative motion7.2 Linear modelling7.3 Hierarchical modelling7.3.1 Hierarchical transformations8. Lighting and Materials8.1 Lighting sources8.1.1 Point light8.1.2 Dir…

如何将revit的内建模型导出使用?项目族管理功能介绍

Revit中内建模型建模是我们常用的功能,每次建模完成后都可以在另一个项目中使用,但是前提是需要导出后再载入才能在另一个项目中使用。今天就教教大家如何将Revit的内建模型单独导出,方便大家下次使用在其它项目。 如何将revit的内建模型单独…

计算机组成原理_总线的性能指标

计算机组成原理总目录总线的性能指标 一、总线周期和时钟周期 总线周期 总线周期通常指的是CPU完成一次访问内存或I/O端口操作所需要的时间 其中包括申请阶段、寻址阶段、传输阶段和结束阶段时钟周期 时钟周期是处理操作最基本的单位,在一个时钟周期内,…

【历史上的今天】1 月 9 日:iPhone 问世;iTunes 发布;激光打印机的发明者出生

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 1 月 9 日,在 1978 年的这段时间,我国恢复了研究生制度,这一年,共录取了 10500 多名研究生。研究生教育的中断和…

哈希的应用 —— 布隆过滤器

目录 一、布隆过滤器的提出 二、布隆过滤器的介绍 1. 基本概念 2. 布隆过滤器的特点 3. 哈希函数和布隆过滤器的长度对误判的影响 三、布隆过滤器的实现 1. 布隆过滤器的插入 (Set接口) 2. 布隆过滤器的查找(Test接口) …

javascript原型之保姆级讲解

目录前言一,面向对象编程1.1 面向过程与面向对象1.2 JS创建类和对象1.3 类的继承1.4 Super关键词1.5 几个注意点二,构造函数原型2.1 创建对象的三种方法2.2 静态成员和实例成员2.3 构造函数的弊端2.4 函数的共享-原型prototype2.5 对象原型___proto__2.6…

用Python制作你的专属音乐播放器(此刻浪漫只属于你哦*´▽`*)

文章目录前言一、项目介绍二、环境配置三、代码实战前言 昨天是博主的一位朋友生日,除了送上大大的红包,知道他喜欢听音乐,特意用代码给他写了一个 专属音乐播放器,今天把这个代码也开源送给所有粉丝哦。 一、项目介绍 我们常用…

Vue--》实现动画与过渡效果

目录 动画效果 过渡效果 第三方动画库 Vue封装的过渡与动画作用是在插入、更新或移除DOM元素时,在合适的时候给元素添加类名。 动画效果 操作css的trasition或animation,vue会给目标元素添加/移除特定的class,过渡的相关类名是&#xff1…

Spring项目中用了这种解耦模式,经理对我刮目相看

前言 不知道大家在项目中有没有遇到过这样的场景,根据传入的类型,调用接口不同的实现类或者说服务,比如根据文件的类型使用 CSV解析器或者JSON解析器,在调用的客户端一般都是用if else去做判断,比如类型等于JSON&…

【Spring6源码・IOC】Bean的实例化

上一节我们讲到《【Spring6源码・IOC】BeanDefinition的加载》,这一节我们来讲解一下Bean的实例化。 根据xml或注解加载完Bean的信息后,最终会通过反射来创建bean的对象。 invokeBeanFactoryPostProcessors()主要是加载BeanDefinition。 finishBeanFa…

MAC(m1)-VMWare Fusion安装CentOS7.9(续)

下载了CentOS8,优先安装CentOS8 默认的配置有点小, 可以根据自己需求进行自定义设置: 点击存储,会出现: 咱们是中国人,优先选择中文: 点击网络和主机名,配置网络: 打开网卡开关&…

找出给定数组中和是给定目标整数的两个整数,输出找到的两个整数下标

找出给定数组中和是给定目标整数的两个整数,输出找到的两个整数下标。 (本文获得CSDN质量评分【x】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅…

Android---简易Snackbar

目录 Snackbar 简介 Snackbar 特性 完整Demo Snackbar 简介 Snackbar 是 Android5.0 新特性---Material Design 中的一个控件,用来代替 Toast。Snackbar 就是一个类似 Toast 的快速弹出消息提示的控件,手机上显示在底部,大屏幕设备显示在左…

Golang实现分布式锁

1. go实现分布式锁 通过 golang 实现一个简单的分布式锁,包括锁续约、重试机制、singleflght机制的使用 1.1 redis_lock.go package redis_lockimport ("context"_ "embed""errors""github.com/go-redis/redis/v9""…

Java Netty框架自建DNS代理服务器教程

前言 DNS协议作为着互联网客户端-服务器通信模式得第一关,在当下每天都有成千上亿上网记录产生得当今社会,其重要性自然不可言喻。在国内比较有名得DNS服务器有电信得114.114.114.114、阿里云得223.5.5.5,DNSPod得119.29.29.29,配…

【矩阵论】8. 常用矩阵总结——镜面阵,正定阵

8.4 镜面阵 法向量确定一个镜面 8.4.1 镜面阵的作用 对法向量 Aα−αA\alpha-\alphaAα−αA(Aα)A2ααA(A\alpha)A^2\alpha\alphaA(Aα)A2αα 对镜面上向量 AYYAYYAYY 8.4.2 镜面阵表示 AIn−2ααH∣α∣2,其中α(x1x2⋮xn)∈Cn,且α≠0AI_n-\frac{2\alpha\alpha^H}{\…

【实际开发02】- 同模块 - 单表 CRUD 代码 - 批量操作

目录 0. yml 配置 1. 账号 / 密码 等有概率变更的信息 推荐 动态配置 , 避免写死 1. entity 处理 ( 减少后续 insert/update 判空处理 ) 1. volidation.annotation 配合 Valid - 参数校验 2. Validated - ( 相较于 valid 更加严谨的校验 ) 1. Save / Status 2. Update /…