js中的回调函数

node.js中的路由模块回调函数的理解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function start (route,handle) {
// body...
function onRequest (request,response) {
var pathname=url.parse(request.url).pathname;
response.writeHead(200, {"Content-Type": "text/plain"});
var content=route(handle,pathname);
console.log(content);
response.write(content);
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("server start...");
}

回调函数会延迟执行,是在包含函数的函数体内指定位置调用
调用的时机与外层的函数有关
该函数是被预先定义,还是匿名函数,都无关紧要(不要注意这些细节==)
本质上只是传递了函数的定义,并不执行
在找个例子中,作为一个开启服务器的函数,无论何时服务器收到一个请求,都会调用onRequest()

举个栗子

1
2
3
4
5
6
$('.button').click(function (parameter) {
#statements
});
$(function(){
});

第一个jquery函数中,回调函数是$(‘.button’).click();
只有在元素触发click时才会回调


通过回调聊聊阻塞和非阻塞

node.js单线程多并发的原因

Apache是​​多线程的:它每个请求产生一个线程(或者进程,它取决于conf)。
随着并发连接的数量增加,需要更多的线程来为多个同时的客户端提供服务。
可以看到这种开销如何消耗内存。Nginx和Node.js不是多线程的,因为线程和进程承载了大量的内存成本。
它们是单线程的,但是基于事件。这消除了通过在单个线程中处理许多连接而由数千个线程/进程创建的开销。
Mixu的博文

这句话的意思是说,Node.js 可以在不新增额外线程的情况下,依然可以
对任务进行并行处理 —— Node.js 是单线程的。它通过事件轮询(event
loop)来实现并行操作,对此,我们应该要充分利用这一点 —— 尽可能
的避免阻塞操作,取而代之,多使用非阻塞操作。
然而,要用非阻塞操作,我们需要使用回调,通过将函数作为参数传递给
其他需要花时间做处理的函数(比方说,休眠 10 秒,或者查询数据库,
又或者是进行大量的计算)。
对于 Node.js 来说,它是这样处理的:“ 嘿, probablyExpensiveFunction()
(译者注:这里指的就是需要花时间处理的函数),你继续处理你的事情,
我( Node.js 线程)先不等你了,我继续去处理你后面的代码,请你提供
一个 callbackFunction() ,等你处理完之后我会去调用该回调函数的,谢
谢! ”

第一次使用hexo 官方的介绍(还是不删了==)

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment