REPL 回调函数 事件循环

REPL-----------------------------------------------------
Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。
REPL可以执行如下任务{
读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。
执行 - 执行输入的数据结构
打印 - 输出结果
循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
} 简单的表达式运算 > 1 + ( 2 * 3 ) - 4
使用变量 > var y = 10
多行表达式{
> var x = 0
undefined
> do {
... x++;
... console.log("x: " + x);
... } while ( x < 5 );
} 下划线(_)变量
你可以使用下划线(_)获取上一个表达式的运算结果:{
$ node
> var x = 10
undefined
> var y = 20
undefined
> x + y
30
> var sum = _
undefined
> console.log(sum)
30
undefined
>
} REPL 命令{
ctrl + c - 退出当前终端。
ctrl + c 按下两次 - 退出 Node REPL。
ctrl + d - 退出 Node REPL.
向上/向下 键 - 查看输入的历史命令
tab 键 - 列出当前命令
.help - 列出使用命令
.break - 退出多行表达式
.clear - 退出多行表达式
.save filename - 保存当前的 Node REPL 会话到指定文件
.load filename - 载入当前 Node REPL 会话的文件内容
} 回调函数-----------------------------------------------------
回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。
回调函数一般作为函数的最后一个参数出现
function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { } ----阻塞代码实例
创建文件input.txt内容是{
inputmessage
}
然后创建main.js 内容是{
var fs = require("fs");
var data = fs.readFileSync('input.txt'); //synchronization 同步
console.log(data.toString());
console.log("程序执行结束!");
}
输出{
inputmessage
程序执行结束!
} ----非阻塞代码实例
创建文件input.txt内容和上面一样。
然后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("程序执行结束!");
}
输出{ 程序执行结束
inputmessage } 事件循环-----------------------------------------------------
Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。
Node.js 几乎每一个 API 都是支持回调函数的。
Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数. Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下实例:
// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter(); // 创建事件处理程序
var connectHandler = function connected() {
console.log('连接成功。');
// 触发 data_received 事件
eventEmitter.emit('data_received');
} // 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler); // 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
console.log('数据接收成功。');
}); // 触发 connection 事件
eventEmitter.emit('connection');
console.log("程序执行完毕。");
执行结果{
连接成功。
数据接收成功。
程序执行完毕。
} Node 应用程序是如何工作的?{
在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数。
input.txt{
inputmessage
} var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err){
console.log(err.stack);
return;
}
console.log(data.toString());
});
console.log("程序执行完毕");
执行结果{
程序执行完毕
inputmessage
} 删除input.txt让他报错,执行结果是这样的{
程序执行完毕
Error: ENOENT: no such file or directory, open 'C:\Users\Administrator\Desktop\S\input.txt'
}
}

最新文章

  1. Hibernate 简介
  2. Hibernate和jsp做数据库单表的增删改查
  3. Arima拟合函数,se出现NaN问题
  4. 杂项一之js,&lt;select&gt;标签
  5. C#学习笔记(二):继承、接口和抽象类
  6. c 递归函数浅析
  7. python 面向对象高级编程
  8. vnc执行,报xauth could not run
  9. chrome 全屏无法退出
  10. PHP常用封装类
  11. IP多播(组播)
  12. SVN-Attempted to lock an already-locked dir错误
  13. Error establishing socket解决办法
  14. PL/SQL 三个小例子
  15. DESTOON B2B标签(tag)调用手册
  16. SpringMVC概述
  17. python目录结构
  18. Maven整合SSM测试
  19. 志愿者招募 HYSBZ - 1061(公式建图费用流)
  20. android studio adb.exe已停止工作(全面成功版 进程的查询和开启)

热门文章

  1. Python爬虫系统化学习(5)
  2. FreeBSD 中文TTY控制台
  3. slickgrid ( nsunleo-slickgrid ) 2 修正区域选择不能跨冻结列的问题
  4. python flake8 代码扫描
  5. 技术分享PPT整理(一):Bootstrap基础与应用
  6. C语言数组寻址
  7. io流(文件字符流(FileReader,FileWriter文件的复制))
  8. [题解] [NOI Online 2021 入门组 T3] 重力球
  9. Spring笔记(五)
  10. INTERSPEECH2020 语音情感分析论文之我见