REPL(交互式解释器)
- 读取 - 读取用户输入,解析输入的 Javascript 数据结构并存储在内存中。
- 执行 - 执行输入的数据结构
- 打印 - 输出结果
循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
REPL命令
**ctrl + c**- 退出当前终端。**ctrl + c **按下两次 - 退出 Node REPL。**ctrl + d**- 退出 Node REPL.- 向上/向下 键 - 查看输入的历史命令
- tab 键 - 列出当前命令
**.help**- 列出使用命令**.break**- 退出多行表达式**.clear**- 退出多行表达式**.save _filename_**- 保存当前的 Node REPL 会话到指定文件**.load _filename_**- 载入当前 Node REPL 会话的文件内容。回调函数
Node.js异步编程的直接体现就是回调
阻塞代码实例
创建一个文件input.txt
菜鸟教程官网地址:www.runoob.com
创建main.js文件
var fs = require("fs");var data = fs.readFileSync('input.txt');console.log(data.toString());console.log("程序执行结束!");
最后执行结果为
$ node main.js菜鸟教程官网地址:www.runoob.com程序执行结束!
非阻塞代码实例
创建一个文件input.txt
菜鸟教程官网地址:www.runoob.com
创建main.js文件
var fs = require("fs");fs.readFile('input.txt', function (err, data) {if (err) return console.error(err);console.log(data.toString());});console.log("程序执行结束!");
最后执行结果为
$ node main.js程序执行结束!菜鸟教程官网地址:www.runoob.com
第一个实例在文件读取完后才执行程序。 第二个实例我们不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。
因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。
事件循环
Node.js 是单进程单线程应用程序
Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
事件驱动程序
Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。
当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。
这个模型非常高效可扩展性非常强,因为 webserver 一直接受请求而不等待任何读写操作。(这也称之为非阻塞式IO或者事件驱动IO)
在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。
Node.js如何工作的
执行异步操作的函数将回调函数作为最后一个参数,回调函数接收错误对象作为第一个参数
