Node概述
Node的执行方式
Node环境和浏览器环境的区别
Node身上全局对象的属性
Node中的模块
Node中导出数据的几种方式
1.什么是Node.js?
Node.js 是一个基于"Chrome V8 引擎" 的JavaScript “运行环境”
2.什么是V8引擎?
V8引擎是一款专门解释和执行JS代码的虚拟机, 任何程序只要集成了V8引擎都可以执行JS代码 例如:
-将V8引擎嵌入到浏览器中,那么我们写的JavaScript代码就会被浏览器所执行; -将V8引擎嵌入到NodeJS中,那么我们写的JavaScript代码就会被NodeJS所执行。
3.什么是运行环境?
运行环境 就是 生存环境 地球是人类的生存环境 浏览器是网页的生存环境 windows是.exe应用程序的生存环境 Android是.apk应用程序的生存环境 也就是说运行环境就是特定事物的生存环境 … NodeJS也是一个生存的环境,
由于NodeJS中集成了V8引擎 所以NodeJS是JavaScript应用程序的一个生存环境
4.总结:
NodeJS不是一门编程语言, NodeJS是一个运行环境, 由于这个运行环境集成了V8引擎, 所以在这个运行环境下可以运行我们编写的JS代码, 这个运行环境最大的特点就是提供了操作"操作系统底层的API",
通过这些底层API我们可以编写出网页中无法实现的功能(诸如: 打包工具, 网站服务器等)
1.由于浏览器中集成了V8引擎, 所以浏览器可以解释执行JS代码
1.1可以直接在浏览器控制台中执行JS代码
1.2可以在浏览器中执行JS文件中的JS代码
或者在命令行中打开node执行js代码如图:
2.由于NodeJS中也集成了V8引擎, 所以浏览器可以解释执行JS代码
2.1可以直接在命令行工具中编写执行JS代码(REPL – Read Eval Print Loop:交互式解释器)
2.2可以在命令行工具中执行JS文件中的JS代码
如图:
Node环境和浏览器环境的区别:
1.Node环境和浏览器环境区别
NodeJS环境和浏览器环境一样都是一个JS的运行环境, 都可以执行JS代码.
但是由于宿主不同所以特点也有所不同
1.1内置对象不同
- 浏览器环境中提供了window全局对象
- NodeJS环境中的全局对象不叫window, 叫global
1.2this默认指向不同
- 浏览器环境中全局this默认指向window
- NodeJS环境中全局this默认指向空对象{}
1.3API不同
- 浏览器环境中提供了操作节点的DOM相关API和操作浏览器的BOM相关API
- NodeJS环境中没有HTML节点也没有浏览器, 所以NodeJS环境中没有DOM/BOM
Node全局对象身上的属性:
1.和浏览器一样Node环境中的全局对象也提供了很多方法属性供我们使用
中文文档地址: http://nodejs.cn/api/
__dirname: 当前文件所在文件夹的绝对路径
__filename: 当前文件的绝对路径 setInterval / clearInterval : 和浏览器中window对象上的定时器一样 setTimeout / clearTimeout :
和浏览器中window对象上的定时器一样 console : 和浏览器中window对象上的打印函数一样
什么是模块:
1.什么是模块?
1.1浏览器开发中的模块 在浏览器开发中为了避免命名冲突, 方便维护等等 我们采用类或者立即执行函数的方式来封装JS代码, 来避免命名冲突和提升代码的维护性 其实这里的一个类或者一个立即执行函数就是浏览器开发中一个模块 let obj =
{ 模块中的业务逻辑代码 }; ;(function(){ 模块中的业务逻辑代码 window.xxx = xxx; })(); 存在的问题:
没有标准没有规范
1.2NodeJS开发中的模块 NodeJS采用CommonJS规范实现了模块系统
1.3CommonJS规范 CommonJS规范规定了如何定义一个模块, 如何暴露(导出)模块中的变量函数, 以及如何使用定义好的模块
- 在CommonJS规范中一个文件就是一个模块
- 在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的
- 在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其它文件才可以使用
- 在CommonJS规范中想要使用其它文件暴露的变量函数必须通过require()导入模块才可以使用
如:
//导出
let name = "it666.com";
function sum(a, b) {
return a + b;
}
exports.str = name;
exports.fn = sum;
//导入
let aModule = require('./06_a');
// console.log(name);
console.log(aModule);
console.log(aModule.str);
console.log(aModule.fn(10, 20))
Node中导出数据几种方式:
1.在NodeJS中想要导出模块中的变量函数有三种方式
1.1通过exports.xxx = xxx导出
1.2通过module.exports.xxx = xxx导出
1.3通过global.xxx = xxx导出
注意点:
无论通过哪种方式导出, 使用时都需要先导入(require)才能使用
通过global.xxx方式导出不符合CommonJS规范, 不推荐使用
实例:
07_a.js
:
let name = "it666.com";
function sum(a, b) {
return a + b;
}
//导出数据的第一种方式
// exports.str = name;
// exports.fn = sum;
//第二种方式:
// module.exports.str = name;
// module.exports.fn = sum;
//第三种方式:
global.str = name;
global.fn = sum;
07_b.js
:
//导入07_a.js
let aModule = require('./07_a');
//第一二种使用方式按照下面代码都可以执行
/*console.log(aModule);
console.log(aModule.str);
let res = aModule.fn(10, 20);
console.log(res);*/
//虽然没使用到aModule,但是如果没有导入,是无法使用str,fn的
//不符合commonjs的规范,知道就可
//第三种方式的接收代码:
console.log(str);
let res = fn(10, 20);
console.log(res);