笔者在之前的一片博客中简单的讨论了Python和Javascript的异同,其实作为一种编程语言Javascript的异步编程是一个非常值得讨论的有趣话题。
JavaScript 异步编程简介
回调函数和异步执行
所谓的异步指的是函数的调用并不直接返回执行的结果,而往往是通过回调函数异步的执行。
我们先看看回调函数是什么:
var fn = function(callback) { // do something here ... callback.apply(this, para); }; var mycallback = function(parameter) { // do someting in customer callback }; // call the fn with callback as parameter fn(mycallback);
回调函数,其实就是调用用户提供的函数,该函数往往是以参数的形式提供的。回调函数并不一定是异步执行的。比如上述的例子中,回调函数是被同步执行的。大部分语言都支持回调,C++可用通过函数指针或者回调对象,Java一般也是使用回调对象。
在Javascript中有很多通过回调函数来执行的异步调用,例如setTimeout()或者setInterval()。
setTimeout(function(){ console.log("this will be exectued after 1 second!"); },1000);
在以上的例子中,setTimeout直接返回,匿名函数会在1000毫秒(不一定能保证是1000毫秒)后异步触发并执行,完成打印控制台的操作。也就是说在异步操作的情境下,函数直接返回,把控制权交给回调函数,回调函数会在以后的某一个时间片被调度执行。那么为什么需要异步呢?为什么不能直接在当前函数中完成操作呢?这就需要了解Javascript的线程模型了。
http://blog.renren.com/blog/818891463/928031480http://blog.renren.com/blog/818891463/928030919
http://blog.renren.com/blog/814709942/926555577
http://blog.renren.com/blog/814709942/928031398
http://blog.renren.com/blog/814709942/928031145
http://blog.renren.com/blog/814709942/928031084
http://blog.renren.com/blog/814709942/928030866
http://blog.renren.com/blog/818892368/928031581
http://blog.renren.com/blog/818892368/928031314
http://blog.renren.com/blog/818892368/928030987