首页 > 关于javascript回调函数的问题

关于javascript回调函数的问题

我一直有个疑问,在大部分讲回调的书都会这么写,js是单线程,每次执行一个任务,从而一个任务处理事件很长,后面的任务也不能执行,所以出现了异步,一个任务结束了会执行他的回调函数,后面的任务不用等他执行完,这样程序执行的顺序就不是代码从上而下的逻辑了

比如f1(f2)

function f1(cb){
    settimeout(function(){
    f1code
    cb()
    },delay)
}

我还是不能理解啊,这样f1运行完才能执行f2,既然是单线程,后面的程序比如是f3为什么可以不等f1执行完,f1还在运行啊,线程不会被阻塞吗?还有这样f1运行完就会运行f2,若是f3需要f1处理的数据,f1还没运行完f3已经开始了,不就出错了吗?


这是你需要的:

彻底理解同步、异步和事件循环


如果f3需要f1处理的数据,f3就得作为f1的回调

f1(f2,f3)
function f1(cb,db){
    settimeout(function(){
    f1code
    cb();
    db();
    },delay)
}

这个问题一两句话讲不清楚。 这篇文章还不错,推荐LZ看看:http://www.phpweblog.net/rain...


异步跟单线程要区分开 http://www.cnblogs.com/Mainz/...
话说 f3 在哪里- -


之前看nodejs的异步,大概是如果出现异步操作,则nodejs引擎将该操作交由操作系统的异步程序(不同的操作系统有不同的程序,名字忘记了)执行,如果操作系统执行完则通知nodejs引擎,nodejs引擎会先执行同步操作(异步操作提交给操作系统,并跳过),执行完了之后等待操作系统通知,开始执行回调。。所以,正因为是单线程,异步操作才需要回调。。

所以异步操作不会阻塞,因为此时是操作系统在执行。。但是回调会阻塞,一旦回调写法不对(嵌套等等),就会阻塞

大致是就是这样,个人理解,如果有误请见谅

【热门文章】
【热门文章】