前言:

  本篇介绍的是Node.js中的函数,相对于上一篇会简单一点,其实和我们Javascript中的function无异

  好了,废话不多说了,我们进入正题吧。


Node.js函数:

【示例1:创建基本的带参函数】

  在Javascript中,我们使用function定义函数,Node.js本身语法就可以看做纯Js,所以创建函数也是一样的。

function sayHello(_name){
    console.info("Hello : " + _name);
}

sayHello("GuYing");

  上述代码中,我们创建了一个最基本的带参函数,然后在下面调用,传入所需参数,运行结果如下:

【示例2:函数作为参数传递】

  在Javascript中,一个函数可以作为参数传入另一个函数中。我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数。

  Node.js中函数的使用与Javascript类似,举个例子吧,大家仔细看,我写上注释了:

 // 加法
 function Additive(num1, num2){
     console.info(num1 + " + " + num2 + " = " + (num1+num2));
 }

 // 减法
 function Subtraction(num1, num2){
     console.info(num1 + " - " + num2 + " = " + (num1-num2));
 }

 // 乘法
 function Multiplication(num1, num2){
     console.info(num1 + " * " + num2 + " = " + (num1*num2));
 }

 // 除法
 function Division(num1, num2){
     console.info(num1 + " / " + num2 + " = " + (num1/num2));
 }

 // 计算器,传入计算方法及两个数
 function Calculator(functionName, num1, num2){
     functionName(num1, num2);
 }

 // 传入乘法及两个参数
 Calculator(Multiplication, 3, 5);

  以上代码中,我们创建了四个方法,都是传入两个参数,然后进行对应的计算,最后输出计算结果。

  重点是最后一个函数Calculator(),这个函数需要三个参数:functionName、num1、num2。

  functionName表示需要运行的函数名称,注意表示的不是传入函数的返回值而是函数本身

  然后在里面(L23行)使用传入的函数进行运算。最后,27行,我们调用Calculator()函数,传入乘法函数及两个参数。

  运算结果如下:


Node.js匿名函数:

  我们可以把一个函数作为变量传递。

  但是我们不一定要绕这个"先定义,再传递"的圈子,我们可以直接在另一个函数的括号中定义和传递这个函数:

 function execute(someFunction, value) {
   someFunction(value);
 }

 execute(function(word){ console.log(word) }, "GuYing");

  上述代码中,我们创建了一个execute函数,需要两个参数,函数功能是:将第二个参数传递进入第一个函数参数中运行。

  然后,我们在第5行,调用execute函数,传入一个匿名函数及一个参数。匿名函数表达的含义是将传入的word参数输出。第二个参数是“GuYing”。

  那么结合execute的作用,运行结果如下:

  用这种方式,我们甚至不用给这个函数起名字,这也是为什么它被叫做匿名函数 。

  有点小绕,呵呵,大家不要晕,结合.NET/Java,实在不行,结合Javascript去理解就OK了。


函数传递是如何让HTTP服务器工作的:

  回顾我们第3节说的创建HTTP服务器:

 var http = require("http");

 http.createServer(function(request, response){
     response.writeHead(200, {"Content-Type":"text/plain"});
     response.write("Hello World!");
     response.end();
 }).listen(88);

  这里我们使用http对象createServer创建服务器的时候,我们传入的是一个带有请求响应的匿名函数,小动代码:

 var http = require("http");

 function onRequest(request, response){
     response.writeHead(200, {"Content-Type":"text/plain"});
     response.write("Hello World!");
     response.end();
 }

 http.createServer(onRequest).listen(88);

  其实,每当我们发送请求的时候,都会执行一次onRequest,大家可以在里面使用 console.log("A request has be in."); ,然后去重复请求页面。看看效果。呵呵。


小结:

  还是那句话:

  有点小绕,呵呵,大家不要晕,结合.NET/Java,实在不行,结合Javascript去理解就OK了。

  好了,感谢大家的支持,如果觉得不错,就点个赞吧。(*^_^*)您的支持就是我的动力。

Node.js 教程 06 - 函数的更多相关文章

  1. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  2. Node.js 教程 04 - 模块系统

    前言: Node.js的模块系统类似于C/C++的文件引用,可以声明对象,也可以定义类 创建对象. 大家这么理解,就简单了. 定义: 为了让Node.js的文件可以相互调用,Node.js提供了一个简 ...

  3. 【转载】Node.js 教程(菜鸟教程系列)

    很好的一篇教程:Node.js 教程 简单做下笔记 概述 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立 ...

  4. 10+ 最佳的 Node.js 教程和实例

    如果你正在找Node.js的学习资料及指南,那么请继续(阅读),我们的教程将会覆盖即时聊天应用.API服务编写.投票问卷应用.人物投票APP.社交授权. Node.js on Raspberry Pi ...

  5. Node.js教程系列~目录

    Node.js这个东西在近几年火起来了,而且会一直火下去,无论在infoq还是在cnblogs,csdn上,都可以到处看到它的样子,它主推的应该就是异步式I/O 吧,是的,设计的很完美,很吸引人,虽然 ...

  6. [整理]Node入门 » 一本全面的Node.js教程 - Demo实践所遇到的问题

    花了一个上午看完[转载]Node入门 » 一本全面的Node.js教程 根据里面的Demo自己手动实现过程中还是遇到了些问题,特整理在此. <1>.由于node.msi安装包已经自动添加了 ...

  7. 实用的 Node.js 教程,工具和资源

    这里分享一批实用的实用的 Node.js 教程,工具和资源. Node.js是一个建立在Chrome之上的JavaScript运行时平台,可方便地构建快速,可扩展的网络应用程序.Node.js使用事件 ...

  8. 专门针对初学者的Node.js教程

    转载原文:http://www.csdn.net/article/2013-08-28/2816731-absolute-beginners-guide-to-nodejs Node.js的教程并不缺 ...

  9. [转载]Node入门 » 一本全面的Node.js教程

    http://www.nodebeginner.org/index-zh-cn.html 作者: Manuel Kiessling 翻译: goddyzhao & GrayZhang & ...

随机推荐

  1. CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#)

    CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#) 效果图 本文解决了将OpenGL渲染出来的内容保存到PNG图片的方法. 下载 CSharpGL已在GitHub开 ...

  2. Hadoop相关日常操作

    1.Hive相关 脚本导数据,并设置运行队列 bin/beeline -u 'url' --outputformat=tsv -e "set mapreduce.job.queuename= ...

  3. 如何优雅地使用Sublime Text

    Sublime Text:一款具有代码高亮.语法提示.自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受.相比于难于上手的Vim,浮肿沉重的Eclip ...

  4. 存储程序(2)——MYSQL

    1.触发器 触发器是与特定数据表相关联的存储过程,当相应的数据表被INSERT.DELETE或UPDATE语句修改时,触发器将自动执行.触发器可以被设置成在这几种语句处理每个数据行之前或之后触发.触发 ...

  5. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  6. ITTC数据挖掘平台介绍(四) 框架改进和新功能

    本数据挖掘框架在这几个月的时间内,有了进一步的功能增强 一. 超大网络的画布显示虚拟化     如前几节所述,框架采用了三级层次实现,分别是数据,抽象Node和绘图的DataPoint,结构如下:   ...

  7. 浅析MySQL基于ROW格式的二进制日志

    上文分析的二进制日志实际上是基于STATEMENT格式的,下面我们来看看基于ROW格式的二进制日志,毕竟,两者对应的binlog事件类型也不一样,同时,很多童鞋反映基于ROW格式的二进制日志无法查到原 ...

  8. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  9. 读书笔记--SQL必知必会08--使用函数处理数据

    8.1 函数 每个DBMS都有特定的函数.事实上,只有少数的几个函数被所有主要DBMS同时支持. 实现同一功能的函数,在不同的DBMS中的名称和语法极有可能不同,也就是说SQL函数不可移植的. 可移植 ...

  10. 全球PM25实时可视化

    星期一的早上,我在办公区鸟瞰窗外,目光所到之处,用顾城的那首"你看天时很近,看我时很远"倒是格外的应景.作为一名父亲,看着工位上3M的口罩,想想此刻还在熟睡的孩子,多少有些无奈-- ...