nodejs系列(二)REPL交互解释 事件循环
一、REPL交互解释
命令行中输入node启动REPL:
> var x =2;
undefined
> do{x++;
... console.log("x:="+x);
... }while(x<6);
x:=3
x:=4
x:=5
x:=6
undefined
>
Ctrl + C退出循环或者当前终端;
> a * b
30
> var c = _
undefined
> console.log(c)
30
下划线(_)变量
可以使用下划线(_)获取表达式的运算结果↑
二、事件循环
这个小demo差点成为我的瓶颈(想想也很可笑的,居然这样了,习惯太差)
//引入 events 模块
//var events = require('events');
////创建 eventEmitter 对象
////var eventEmitter = new events.EventEmitter();
var eventEmitter = new (require('events')).EventEmitter();
//////创建 eventEmitter 对象
//var eventEmitter = new events.EventEmitter();
////绑定事件及事件的处理程序
//eventEmitter.on('eventname',eventHandler);
////触发事件
//eventEmitter.emit('eventname');
//创建事件处理程序
var connectHandler = function connected(){
console.log('第①步--连接成功!');
//触发事件 data_received
eventEmitter.emit('data_received');
var x = 5,y = 3;
console.log("第③步--"+(x+y));
}
兰青色部分必须之前定义
//绑定 connection 事件处理程序
eventEmitter.on('connection',connectHandler);
//使用匿名函数绑定 data_received事件
eventEmitter.on('data_received',function(){
console.log("第②步--数据接收成功!");
})
//触发 connection 事件
eventEmitter.emit("connection");
console.log("第④步--events over!");
E:\node>node main.js
first--cuccess��
second--data success��
third--8
forth--events over!
E:\node>node main.js
第①步--连接成功!
第②步--数据接收成功!
第③步--8
第④步--events over!
var events = require("events"); //注意是events,注意s第二个错误
var emitter = new events.EventEmitter();
emitter.on('someEvent',function(arg1, arg2){
console.log('listener1', arg1, arg2);
});
emitter.on('someEvent', function(arg1, arg2){
console.log('listener2', arg1, arg2);
});
emitter.emit('someEvent', 'arg1 参数', 'arg2 参数');
E:\node\event.js:11 注意封号
emitter.emit('someEvent', 'arg1 鍙傛暟'锛?'arg2 鍙傛暟')锛?
^
SyntaxError: Unexpected token ILLEGAL
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
E:\node>node event.js
module.js:340
throw err;
^
Error: Cannot find module 'event'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (E:\node\event.js:2:13)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
E:\node>node event.js
listener1 arg1 参数 arg2 参数
listener2 arg1 参数 arg2 参数
E:\node>
nodejs系列(二)REPL交互解释 事件循环的更多相关文章
- 【转向Javascript系列】从setTimeout说事件循环模型
本文首发在alloyteam团队博客,链接地址http://www.alloyteam.com/2015/10/turning-to-javascript-series-from-settimeout ...
- 乱七八糟Nodejs系列二:线程模型
上一篇中说了这样一句话:Nodejs和浏览器javascript一样,都是单线程,所以和传统的不一样,这个后面有机会再说.挖了坑就得填,哎. 1.一个例子 来看一个例子,这个例子来自async jav ...
- NodeJs系列二:你好,世界
安装nodejs 什么是nodejs中的模块 hello,world
- 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
目录 Event Loop 是什么? Event Loop 基本解释 事件循环阶段概览 事件循环细节 timers pending callbacks poll阶段 check close callb ...
- 深入理解javascript中的事件循环event-loop
前面的话 本文将详细介绍javascript中的事件循环event-loop 线程 javascript是单线程的语言,也就是说,同一个时间只能做一件事.而这个单线程的特性,与它的用途有关,作为浏览器 ...
- nodejs-REPL/回调函数/事件循环
REPL 回调函数 事件循环 REPL----------------------------------------------------- Node.js REPL(Read Eval Prin ...
- 深入理解 JavaScript 事件循环(二)— task and microtask
引言 microtask 这一名词是 JS 中比较新的概念,几乎所有人都是在学习 ES6 的 Promise 时才接触这一新概念,我也不例外.当我刚开始学习 Promise 的时候,对其中回调函数的执 ...
- [译] 深入理解 JavaScript 事件循环(二)— task and microtask
引言 microtask 这一名词是 JS 中比较新的概念,几乎所有人都是在学习 ES6 的 Promise 时才接触这一新概念,我也不例外.当我刚开始学习 Promise 的时候,对其中回调函数的执 ...
- 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
[摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...
随机推荐
- 求解PDE的多重网格法(MG)
多重网格法相对于普通的Jacobi迭代或者G-S迭代等能够得到和未知数的个数成线性的高效运行时间的主要原因在于:迭代初值的一步步接近真值和G_S方法的前面几步的快速收敛性. 先看一张图[1]: 这张图 ...
- Java学习-001-JDK安装配置
本节主要讲述在 Win7 64bit 系统下安装.配置 JDK8u25,敬请参阅.详细步骤如下: 一.JDK下载 您可到 官方网站 或 我的云盘 下载,对应的JDK8u25的安装程序,下载过程不再赘述 ...
- 在UIScrollView的delegate方法判断滚动快慢
// 这里做预加载 CGPoint currentOffset = scrollView.contentOffset; NSTimeInterval currentTime = [NSDate tim ...
- Windows Server 2008 R2 DNS服务器迁移
一.实验模拟环境: Zhuyu公司有一个DNS服务器,因DNS服务器比较老旧,准备迁移至新的DNS服务器上(DNS备份也可以这么操作). 旧DNS服务器: 主机名: test-zhuAD ...
- Hadoop:搭建hadoop集群
操作系统环境准备: 准备几台服务器(我这里是三台虚拟机): linux ubuntu 14.04 server x64(下载地址:http://releases.ubuntu.com/14.04.2/ ...
- H5 新标签用法及解释
HTML 5 是一个新的网络标准,目标在于取代现有的 HTML 4.01, XHTML 1.0 and DOM Level 2 HTML 标准.它希望能够减少浏览器对于需要插件的丰富性网络应用服务(p ...
- Android--Retrofit+RxJava的简单封装(三)
1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...
- java实现求数组中元素第二大的元素
/** * 找出数组中数第二大的值 * @param array * @date 2016-9-25 * @author shaobn */ public static void getMethod_ ...
- ruby注意点
1.强类型,即不会自动进行类型转换,而C/C++为弱类型. # Ruby i = 1 puts "Value is " + i # TypeError: can't convert ...
- apache+php+mysql的配置(转载)
windows: 按http://jingyan.baidu.com/article/fcb5aff797ec41edaa4a71c4.html的安装 按http://www.jb51.net/art ...