Node.js自学笔记(一)

一、Node.js基础

1.1 Node.js 的组成

Node.js是由 ECMAScriptNode环境提供的一些附加API组成的。核心语法为ECMAScript

1.2 Node.js基础语法

所有的ECMASript语法在Node环境中都可以使用。

1.3 Node.js文件的执行

通常情况下,.js文件是要依赖于.html文件的引用才可以执行的。在Node.js开发中,是没有.html文件的。那么Node.js文件要如何执行呢?这就要借助操作系统自带的命令行工具来完成执行操作。具体步骤如下:

  1. 首先让我们创建一个.js文件,并写入一些代码
    在这里插入图片描述
  2. 然后在我们刚刚创建的.js文件所属的目录打开操作系统的命令行工具PowerShell (windows操作系统命令行工具),具体操作如图
    在这里插入图片描述
    PowerShell界面如图
    在这里插入图片描述
  3. 下面在命令行工具中来执行创建好的.js文件。要注意的是,命令行的工作目录一定要与你需要执行的文件的工作目录一致,具体的方法在第二步中我已详细介绍。接下来我们只要在命令行中写入 node + 要执行的文件名(中间要用空格分离),再按回车键,.js代码就会被执行了。具体效果如图
    在这里插入图片描述
    可以看到,我们在.js文件中写入的代码已经被成功执行了

二、Node.js模块化开发

2.1 Node.js中模块化开发规范
  1. Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到
  2. 模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块。
2.2 模块成员的导入与导出示例
  1. 首先我在同一个目录下创建了两个.js文件。分别命名为 a.js 和 b.js。a.js 作为要执行 导出操作 的模块,而 b.js 则作为要执行 导入操作 的模块。
    在这里插入图片描述
  2. 下面我将分别对两个.js文件进行编辑。
    首先来看 a.js 。
    a.js要做的就是定义变量、常量或者方法,并将其他模块需要的变量、常量和方法导出去。代码如图
    在这里插入图片描述
    在图示的代码中我分别定义了 一个变量一个常量和一个方法,变量为 数字100 ,常量为字符串 “hello node” ,而定义的方法实现的功能则是对传入的两个参数进行相加操作并将结果返回
    最后再利用expors对象进行成员导出。
    接着来看b.js。
    b.js要做的就是从a.js导出的相关数据中,导入自己需要的那部分。代码如图在这里插入图片描述
    在图示的代码中,我首先使用了常量a作为容器来接收导入的模块a,再通过对象打点的方式来访问a模块中导出的变量、常量和方法并执行传参和输出的操作。
  3. 最后一步就是在命令行中查看我们的操作有没有成功。
    如果在命令行中执行b.js之后,成功得到了a模块中导出的数据,那么就证明我们的代码是没有问题的,下面来看命令行部分在这里插入图片描述
    可以看到,命令行打印了 30 (由于我们在b.js中传入的参数为10和20,相加即为30),100 和 hello node。完全符合a.js中我对变量、常量和方法的定义。所以这个示例是成功的。
2.2 模块成员导出的另一种方式

在Node.js模块化开发当中,模块成员导出实际上有两种方式。上面所介绍的expors 只是其中的一种,我们还可以通过 module.exports 对模块成员进行导出。使用方法与 expors 是一样的。下面我将我举一个简单的示例来验证module.exports 的作用。在下面的实例中,a.js将依然作为执行导出操作的文件,而b.js依然作为执行导入操作的文件。代码如图

a.js
在这里插入图片描述

b.js
在这里插入图片描述

PowerShell在这里插入图片描述
可以看到 module.exports 同样完成了和 export 一致的导出功能。

那么问题来了,这两者到底有什么关系呢。

2.3 module.exports 和 export 的关系

exportmodule.exports 的别名(地址引用关系),导出对象最终以module.exports为准。也就是说module.exportsexport默认情况下,指向的是同一个对象(也可以理解为指向同一块内存空间),但如果出现了 module.exportsexport 地址引用不一致的情况,那么最终的导出对象是以module.exports为准的。下面我将用代码来证实上述结论

依然是a.js作为执行导出操作的文件,b.js作为执行导入操作的文件。

首先来看二者指向同一对象的情况(也就是默认情况下)

a.js
在这里插入图片描述
在a.js的代码中,我定义了一个常量和一个方法,并分别用 exportsmodule.exports 执行了导出操作。下面来看b.js。

b.js
在这里插入图片描述
在b.js的代码中,我直接输出对象a,如果对象a中,同时包含 exportsmodule.exports 所导出的常量和方法,那就证明 exportsmodule.exports 在默认情况下,地址指向是一致的。下面来看PowerShell界面的执行结果。

PowerShell
在这里插入图片描述
可以看到,在a对象中,确实包含了常量x和方法gretting。那么 “module.exports 和 export 在默认情况下,指向的是同一个对象(也可以理解为指向同一块内存空间)” 这一结论就被证实是正确的了。

接下来我来证实第二个结论:当module.exportsexport 地址引用不一致的时候,最终的导出对象是以module.exports为准

下面我将对上面例子中的a.js文件做一些修改,代码如图在这里插入图片描述

此时我直接将 module.exports 指向了一个全新的对象。
这个对象只包含了一个属性值为zhangsan的name属性。那么此时我在PowerShell执行b.js输出的会是什么呢?请看下图

PowerShell
在这里插入图片描述
可以看到输出的对象已经被替换成了我们后来写入的 name = ‘zhangsan’ 所属的对象了。这样也就证实了第二个结论的正确性了。

那么如果使用 export 能否实现更改导出对象指向的作用呢?

我现在将再次对a.js进行修改。代码如图在这里插入图片描述
最后我们到PowerShell进行执行,看看对象指向有没有变化

PowerShell

在这里插入图片描述
可以看到,输出的依然是 name = ‘zhangsan’ ,这就证明了通过 export 更改导出对象指向的方法是错误的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值