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 = 0undefined> do {... x++;... console.log("x: " + x);... } while ( x < 5 );
}下划线(_)变量
你可以使用下划线(_)获取上一个表达式的运算结果:{$ node> var x = 10undefined> var y = 20undefined> x + y30> var sum = _undefined> console.log(sum)30undefined>
}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'}
}   

nodejs-REPL/回调函数/事件循环相关推荐

  1. nodejs addon实现回调函数事件

    封装nodejs的addon接口,在处理回调函数这块走了很多弯路,在此提供一个简单的测试程序,有兴趣的可以研究下. 安装nan模块 npm install nan binding.gyp文件内容如下: ...

  2. nodejs系列(二)REPL交互解释 事件循环

    一.REPL交互解释 命令行中输入node启动REPL: > var x =2; undefined > do{x++; ... console.log("x:="+x ...

  3. 在nodejs websocket回调函数中没法用this

    在一个nodejs module顶层把数据保存在this的自定义属性里: 然而在回调函数的上下文里,this发生了变化: 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  4. (五)nodejs循序渐进-回调函数和异常处理(基础篇)

    上篇文章我们讲完了类和对象,接下来我们将要说回调函数. 我在第一篇说到nodejs的一个优势是异步IO,实际上异步IO直接体现就是使用回调函数,当然不是用了回调函数,他就一定是异步IO的,因为inod ...

  5. 【nodejs原理源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    [摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...

  6. 1.4 消息循环和回调函数

    ************************************************** * 本文由小鸟飞飞整理发表 <samboy@sohu.com> * * 首发网站:蓝丽 ...

  7. JavaScript事件循环

    大厂面试题分享 面试题库 后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 一.异步执行原理 1. 单线程的JavaScript 我们知道,JavaScript是一种单线程语言,它主要 ...

  8. JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式!...

    此篇是 JavaScript是如何工作的第四篇,其它三篇可以看这里: JavaScript是如何工作的:引擎,运行时和调用堆栈的概述! JavaScript是如何工作的:深入V8引擎&编写优化 ...

  9. setwindowshookex回调函数不执行_ECMAScript 6 入门教程—Generator 函数的异步应用

    作者 | 阮一峰异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是"单线程"的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Gener ...

最新文章

  1. Maven学习总结(七)——eclipse中使用Maven创建Web项目
  2. ubuntu流量监控_linux - 实时流量监控
  3. oracle13001,安装oracle11g 遇到INS-13001环境不知足最低要求 解决方法
  4. android百分比布局失效,Android 百分比布局库【原创】
  5. mysql怎么保存视图_MySQL的视图和存储
  6. python 编译 pyc
  7. 魔方机器人需要特制魔方吗_火影忍者手游:如果新春水门金币团购,你会夸魔方良心吗?...
  8. Python爬虫学习round01
  9. C++与Rust变量声明的比较
  10. JAVA中pin什么意思_银行业加密算法,PIN相关算法(java-国密)
  11. 用python画生日蛋糕-祝你生日快乐
  12. 7月31日 细雨霏霏 不是我的泪
  13. 盗贼之海服务器维护10月28,盗贼之海(Sea of Thieves)登陆不上/问题解决教程
  14. 晒晒那些我在云栖社区获得的奖品
  15. 如何写工学硕士学位论文
  16. 工业软件CAD、CAE、CAM介绍
  17. TC-Traffic Control in Linux
  18. java类型转换的例子
  19. Qt获取大华摄像头监控画面(RTSP流方式)
  20. Android指纹解锁源码分析

热门文章

  1. spring-文件上传
  2. 关于如何修改Redmine系统中的字段问题解答
  3. Microsoft-Office-Professional-Plus-2007
  4. 基于easyui开发Web版Activiti流程定制器详解(四)——页面结构(下)
  5. OSPFv2的综合实验试题分析第1例(CCNP阶段)
  6. 15 个变量和方法命名的最佳实践
  7. ORCLE 表中列的修改(非常全面哦)
  8. ***惯用的社会工程学手法
  9. ASP.NET 网站路径[转载]
  10. 简单的ALV显示例子