Node JS基础

进程和线程

进程:进程负责为程序的运行提供必备的环境。进程相当于工厂中的车间。
线程:线程是计算机中最小的计算单位。线程负责执行保存到进程中的程序。相当于工厂中的工人。

浏览器中的JS都是单线程的。

Node JS简介

Node JS是一种能够在服务器端运行JavaScript的开放源代码,跨平台的JavaScript运行环境。

Node采用的是Google开发的V8引擎运行JS代码。使用事件驱动,非阻塞和异步IO等技术来提高性能。可优化应用程序的传输量和规模。

Node服务器是单线程的,处理的请求也是单线程的,但是后台拥有一个I/O线程池。

CommonJS规范

ECMAScript的缺陷:

  • 没有模块系统
  • 标准库较少
  • 没有标准接口
  • 缺乏管理系统

模块化

如果程序设计的规模达到了一定的程度,则必须对其进行模块化。

模块化可以有多种形式,但至少能够将代码分为多个源文件的机制。

CommonJS的模块功能可以帮我们解决该问题。

CommonJS的提出主要是解决当前JavaScript没有标准的缺陷。CommonJS指定了一个美好的愿景,希望JS能在任何地方运行。

CommonJS对模块的定义十分简单:

  • 模块引用
  • 模块定义
  • 模块标识

在Node中一个js文件就是一个模块。

模块化的好处:

  • 降低耦合度
  • 方便代码复用

在Node中通过require函数引入外部的模块。
使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块。
在Node中每一个JS文件的JS代码都是独立运行在函数中,而不是全局作用域。所以一个模块中的函数和变量在其它模块中无法访问。也就是说每个模块对于其它模块都是封闭的。

不要往全局作用域中写东西,因为那会污染全局命名空间。

模块标识

我们使用require引入外部模块时使用的就是模块标识。可以通过模块标识找到指定的模块。
模块分为两大类:

  • 核心模块:Node引擎提供的模块。核心模块的标识就是模块的名字。
  • 文件模块:由用户自己创建的模块。模块标识就是文件的路径,可以是绝对路径也可以是相对路径。

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

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

function(exports, require, module, _filename, _dirname) {

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

}

实际上模块中的代码都是包装在一个函数中执行的。在函数执行时,传入了五个实参。

exports:用于将内部变量函数暴露到外部。
require:函数用于引入外部的模块。
module:代表当前模块本身。exports是module的属性。
_filename:当前模块的完整路径的名字。
_dirname:当前模块所在文件夹的完整路径。

你可能感兴趣的:(Node JS基础)