为什么javascript异步函数一定要用回调的方式?

对于异步函数来说,回调方式和同步方式有何区别?

                 service
                .queryActivityJoin(data)
                .done(function (response) {

                    // 如果已经参加
                    if (response.data.is_join == 1) {

                        $('.prize').css({

                            "background-image": "url(http://img.gsxservice.com/0cms/d/file/content/2015/01/54b8a83098788.jpg)"
                        });

                    }
                    // 如果还没有参加
                    else if (response.data.is_join == 0) {


                        $('#appmain')

                        .on('click', '.prize', function () {

                            service.addActivityJoin(data);

                            window.location.reload();
                        });
                    }
                });

当然了,回调的方式更直观,因为异步的含义就是调用后不管, 继续执行自己的代码,而异步执行什么时候结束是不知道的。执行好了通知你。
用回调函数很好体现了这一点。

其实不一定
https://cnodejs.org/topic/5425fb61326dfbe724dbd64e
看这个代码,就可以用你熟悉的方式调用异步代码了,无需写回调。

因为JS是单线程的,回调好处在于避免JS阻塞

居于回调就不会阻塞ui了。。js没有线程的概念,你不居于回调,一个for循环几万次做大量计算你流量器就假死了。就和你ajax同步异步一样。