【吐槽 CNode 社区续】异步非阻塞I/O模型及回调函数入门
发布于 11 年前 作者 richarddong 5455 次浏览 最后一次编辑是 8 年前

最新更新:JavaScript匿名函数、函数自调用、返回函数的函数、闭包《入门》


上一篇吐槽贴中的评论,如:

求lz科普,非阻塞模型 ,callback

社区水平不行都是因为楼主拖后腿了……

我来给大家分享一些入门知识和学习资料。

其实之前吐槽就是想激发一下大家的分享的动力,我先起个头吧~


首先必须介绍一下 JavaScript 的函数

JavaScript 的设计是典型的函数式的编程范式。

我们最需要理解的一点就是:所有函数都是对象

比如我们定义一个函数,可以这么写:

function foo (bar) {
  return "foo-" + bar;
}

也可以这么写:

var foo = function (bar) {
  return "foo-" + bar;
};

甚至可以这么写:

var foo = new Function ("bar", "return \"foo-\" + bar;");

这三种写法是一样的

所以,大家经常写的:

setTimeout(function () {
  // some code...
}, 1000);

也可以写成:

var foo = function () {
  // some code...
};
setTimeout(foo, 1000);

或者:

setTimeout(function foo () {
  // some code...
}, 1000);

也都是一样的!!!

setTimeout的例子来看,这个foo函数就是setTimeout的回调函数(callback),其实,这个函数(foo)是作为一个参数(第一个参数)传给setTimeout。在本例中,就是告诉setTimeout函数,在‘你’完成了等待1000毫秒的任务后,‘你’要干什么(回掉函数foo就代表了‘干什么’)。

之所以叫 callback,就是说在执行任务的某些阶段时,执行其他任务(调用其他函数),而这些‘其他任务’是在要求执行本任务的时候定义的。在setTimeout的例子中,就是在调用setTimeout()的时候,告诉它,1000毫秒后执行foo任务。

回调函数可以有自己的参数,我们可以随意地定义两个函数,实现回调。

function printToScreen (string) {
  console.log(string);
}

function someWork (param, callback) {
  var result = Math.pow(param, 9);
  callback(result);
}

someWork(9, printToScreen);

上面的例子就构造了非常简单的回调函数的例子(虽然一点用都没有。。而且不是异步的!)。

最后一行,把9作为someWork第一个参数,把printToScreen作为第二个参数(即回调函数)。

由此实现在完成一些工作以后再打印到屏幕的效果。


上面看完就可以了解非阻塞模型了!

强烈推荐 Code School:

http://www.codeschool.com/courses/real-time-web-with-nodejs

视频教程,第一集是免费的,介绍非阻塞模型,之后的收费,也不贵~

实在写不动了,大家自己看吧。。


继续鼓励大家多分享~~

5 回复

鼓励,鼓励,凡是分享的,我都很喜欢,希望可以看到更多的精彩文章,期待

还真科普了!不过,说少了一个典型例子就是自匿名函数…其实,非阻塞一个很典型最的例子,就是循环里面的回调,与循环索引的问题…

又写了一篇补充了自调用的匿名函数~

顶楼主!

这社区确实氛围欠一点儿。。

回到顶部