最新更新: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
视频教程,第一集是免费的,介绍非阻塞模型,之后的收费,也不贵~
实在写不动了,大家自己看吧。。
继续鼓励大家多分享~~